# 해설의 도움을 받은 풀이 n = int(input()) x = sorted(map(int, input().split())) # 1 2 2 2 3으로 정렬됨 count = 0 # 그룹의 수 p = 0 # 그룹 안의 모험가 수 for i in range(n): p += 1 # 모험가 한명씩 추가 if p >= x[i]: # 모험가가 공포도보다 많거나 같을 경우 그룹 결성 count += 1 p = 0 print(count) # 1 / 2 2 / (보류 2 3) 두 팀으로 결성 # 해설 n = int(input()) x = sorted(map(int, input().split())) count = 0 p = 0 for i in x: # 리스트 x를 범위로 해서 i로 하나씩 호출 p += 1 if p >= ..
# 나의 풀이 n, k = map(int, input().split()) count = 0 while n > 1: if n % k != 0: # 17%4==1 n -= 1 # 16 count += 1 else: n = n//k count += 1 print(count) # 해설 n, k = map(int, input().split()) count = 0 while n >= k: # n을 k로 나눌 수 있을 때까지만 반복 while n % k != 0: n -= 1 count += 1 n //= k count += 1 while n > 1: # 다 나눴는데 n이 1보다 크다면 1씩 빼줌 n -= 1 count += 1 print(count)
# 나의 풀이 n, m = map(int, input().split()) k_min = [] for i in range(n): kard = map(int, input().split()) k_min.append(min(kard)) print(max(k_min)) n, m = map(int, input().split()) k_min = [0 for i in range(n)] for i in range(n): kard = map(int, input().split()) k_min[i] = min(kard) print(max(k_min)) # 해설 n, m = map(int, input().split()) result = 0 for i in range(n): kard = list(map(int, input().s..
# 나의 풀이 n, m, k = map(int, input().split()) num = sorted(map(int, input().split())) total, count = 0, 0 for i in range(m): # 더할 횟수(m)만큼 반복함 if count < k: # 연속으로 더할 수 있는 횟수(k)보다 작을 때만 더하는 조건식 total += num[-1] # 정렬했으므로 뒤에 있는 수가 가장 큼 count += 1 else: # count가 k를 넘겼을 때 total += num[-2] # 뒤에서 두 번째 수를 더하고 count = 0 # count는 0으로 초기화 print(total) # 해설 n, m, k = map(int, input().split()) data = sorted(ma..
그리디 알고리즘이란? 현재 상황에서 지금 당장 좋은 것만 고르는 방법이다. 따라서 최적의 해를 보장할 수 없을 때가 많다. 하지만 코딩테스트에서는 그리디로 얻은 해가 최적의 해가 되는 상황을 추론할 수 있어야 풀리도록 출제된다. 해결 아이디어 1. 최적의 해를 구하기 위해 가장 큰 단위부터 거슬러 준다. 2. 그 이유는 무엇일까? 큰 단위가 항상 작은 단위의 배수이기 때문이다. 3. 800원을 거슬러주어야 할 때 화폐 단위가 500, 400, 100이라면 500은 400의 배수가 아니기 때문에 최적의 해를 구할 수 없다. 예제 3-1. 거스름 돈 # 나의 풀이 money = int(input()) # 거스름돈 1260 count = 0 if money//500 > 0: count += (money//50..