🌞코딩테스트/💜이것이코딩테스트다 [part2]
이것이코딩테스트다 | Ch03 그리디
hyerimmy
2021. 5. 19. 02:39
Date | 2021.05.19 / 2021.07.12
Review | 문제들이 간단해서 금방 풀었다. 책에서 제시한 코드랑 다르게 코딩한 부분도 많아서 비교를 많이 했다. 파이썬으로 코딩테스트를 풀 때 필요한 몇 가지 기본적인 함수 (ex. map)도 정리했는데 유용했다.
1️⃣ 당장 좋은 것만 선택하는 그리디
#당장 좋은 것만 선택하는 그리디
#그리디 알고리즘 (Greedy)
## 특징
매 순간 가장 좋아 보이는 것을 선택
현재의 선택이 나중에 미칠 영향에 대해서 고려하지 않음
## 키워드
가장 큰 순서대로
가장 작은 순서대로
n = 1260
count = 0
# 큰 단위 화폐부터 차례대로 배열로 생성
coin_types = [500, 100, 50, 10]
for coin in coin_types:
count = count + n // coin
n = n % coin
print(count)
2️⃣ [실전문제] 큰 수의 법칙
# N, M, K 입력받기
n, m, k = map(int, input().split())
# N개의 수 입력받기
data = list(map(int, input().split()))
# 가장 큰 값과 그 다음으로 큰 값 구하기
data.sort()
first = data[n-1] # 가장 큰 값
second = data[n-2] # 두번째로 큰 값
# 반복한계 기준
full = 0
result = 0
for i in range(m) :
if(full==k):
full=0
result += second
else:
full += 1
result += first
print(result)
3️⃣ [실전문제] 숫자 카드 게임
# N, M 입력받기
n, m = map(int, input().split())
result = 1
for i in range(n):
data = list(map(int, input().split())) # 카드 값 입력받기
data.sort()
min = data[0]
if(result < min):
result = min
print(result)
4️⃣ [실전문제] 1이 될 때까지
# N, K 입력받기
n, k = map(int, input().split())
result = 0
while(n != 1):
if(n % k != 0): # n이 k로 나누어 떨어지지 않으면 - 1씩빼기
n -= k
result += 1
else: # n이 k로 나누어 떨어지면 - k로 나누기
n = n/k
result += 1
print(result)