알고리즘
구름톤 챌린지 Day01 - Day05 [구현]
나굥
2023. 8. 30. 00:57
728x90
[ 문제 1 ]
W, R = map(int, input().split())
RM = int(W * (1 + R / 30))
print(RM)
소수점 이하의 값을 버릴 때는 int()를 사용하면 편리하다.
[ 문제 2 ]
N = int(input())
T, M = map(int, input().split())
total_min = (T * 60) + M
for i in range(N):
total_min += int(input())
H = (total_min // 60) % 24
M = total_min % 60
print(H, M)
위 문제와 같이 단위가 다른 ex) 시, 분 문제는 먼저 단위를 통일한 후에 계산하고 마지막에 문제에서 제시한 조건으로 단위를 나눠서 출력하는 것이 편한 것 같다. 문제에서 24시는 0시로 출력하라고 했기 때문에 24로 나눈 나머지로 시간을 출력하는 것으로 마무리했다.
[ 문제 3 ]
T = int(input())
result = 0
for i in range(T):
a, cal, b = input().split()
a = int(a)
b = int(b)
if cal == '+':
result += (a + b)
elif cal == '-':
result += (a - b)
elif cal == '*':
result += (a * b)
else:
result += (a // b)
print(result)
[ 문제 4 ]
N = int(input())
K = list(map(int, input().split()))
idx = K.index(max(K))
left_list = K[:idx]
right_list = K[idx+1:]
if (sorted(left_list) == left_list) and (sorted(right_list, reverse = True) == right_list):
print(sum(K))
else:
print(0)
맛의 정도가 가장 높은 재료를 기준으로 하기 때문에 입력받은 재료 리스트 중 가장 큰 값의 위치를 찾아야한다. 따라서 max값의 index를 구하는 함수를 활용하고, 정렬에서 sorted를 활용하여 내림차순의 경우에는 reverse = True를 적용하여 정렬하였다.
[문제 5 ]
def change_num_2(num):
cnt_num = 0
while num >= 1:
cnt_num += num % 2
num = num // 2
return cnt_num
N, K = map(int, input().split())
nums_list = map(int, input().split())
cnt_list = []
for num in nums_list:
cnt_list.append([num, change_num_2(num)])
sorted_list = sorted(cnt_list, key = lambda x : (-x[1], -x[0]))
print(sorted_list[K-1][0])
이진수는 1과 0으로 나타낼 수 있고, 1의 개수는 이진수를 다 더하는 것으로 계산할 수 있다.
[10진수 정수, 1의 개수] 리스트로 나타냈을 때, 1의 개수를 기준으로 먼저 내림차순 (-x[1]), 이후에 10진수 정수 기준으로 내림차순 정렬 (-x[0])으로 정렬을 진행하였다.
728x90