알고리즘

구름톤 챌린지 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