알고리즘 문제풀이
1037번
# 양수 A가 N의 진짜 약수가 되려면, N 이 A의 배수이고, A가 1 과 N이 아니어야 한다.
# 어떤 수 N의 진짜 약수가 모두 주어질 때, N을 구하는 프로그램
# N은 약수의 개수
N = int(input())
A = list(map(int, input().split()))
max_number = max(A)
min_number = min(A)
print(max_number * min_number)
# 약수가 모두 주어지기 때문에 가장 작은 값과 가장 큰 값을 곱하면 진짜 수를 구할 수 있다.
2609번
# 두 개의 자연수를 입력받아 최대 공약수와 최소 공배수 구하기
# 문제 접근 방식 :
# 최대공약수: a 와 b의 최대공약수는 b 와 a를 나눈 나머지의 최대공약수와 같다.
# 최소공배수: a 와 b의 최소공배수는 a*b/최대공약수(a,b)를 해주면 최수 공배수가 된다.
# 최소공배수가 되는 이유는 이 수를 a와 b 모두 나누어떨어지고 나누어 떨어지는 수 중 가장 작은 수이기 때문이다.
l, r = map(int, input().split(' '))
def gcd(a, b):
mod = a % b
while mod > 0:
a = b
b = mod
mod = a % b
return b
def lcm(a, b):
return a * b // gcd(a, b)
print(gcd(l, r))
print(lcm(l, r))
10250번
# h는 층 수 , w는 각 층의 방 수, n은 손님 수
# 각 손님은 층 수는 상관 없고 호수가 작은 걸 선호
# 만약 6층에 각 방이 12개가 있다면 10번 째 온 손님은 402호
rooms = int(input())
for i in range(rooms):
h, w, n = map(int, input().split(' ')) # h(층 수) , w(방의 수), n(손님)
f = 0 # f 는 층 수 저장소
ho = 0 # ho 는 호실 수 저장소
if n % h == 0: # 딱 나눠떨어진다면
f = h * 100 # 층 수는 100 200 300 이런식이기에 100을 곱해준다.
ho = n // h # 나누어 떨어질 때는 몫을 바로 호수로 해준다.
else:
f = (n % h) * 100 # n 에 h를 나눴을 때 나머지를 층 수
ho = 1 + n // h # 나누어떨어지지 않을 때는 나머지 + 1을 호수로 해준다.
print(f + ho)
# h : 6 | w : 12 | n : 10 |
# n : 10 % h : 6 = 4
# 4 != 0
# f = 400 ho = 2
# print (402)
# -------------------------------------
# h : 6 | w : 12 | n : 12 |
# n : 12 % h : 6 = 0
# 0 == 0 (T)
# f = 600 ho = 2
# print(602)
확실히 문제 난이도가 올라가는 것이 느껴진다!
알고리즘 자체가 아직은 너무 어려워서 문제다!
하지만 날이 갈수록 뭔가 안보이던 것이 보이고
문제 접근방식이 완전 처음과는 달라지는 것 같아서
불가능은 없다는 것을 느끼고 있다!
아직은 많이 어렵지만 열심히 공부해서
문제에 대한 접근을 잘할 수 있게끔 열심히 해야겠다!
파이팅👍👍👍✍️✍️✍️
'알고리즘' 카테고리의 다른 글
TIL] 알고리즘 문제풀이[백준] (1152번, 1157번) (0) | 2021.06.19 |
---|---|
TIL] 알고리즘 기초 (0) | 2021.06.18 |
TIL] 알고리즘 문제 풀이 [백준] (2941, 2839, 1436) (0) | 2021.06.16 |
TIL] 알고리즘 문제 풀이 [백준](1110 , 2586, 2884, 2941, 4344, 4673, 10869) (0) | 2021.06.15 |
TIL ] 스택 , 큐, 해쉬 (0) | 2021.06.13 |