- 그리디 알고리즘 설명을 위한 문제 예시로 많이 쓰임
거스름돈으로 사용할 500원, 100원, 50원, 10원짜리 동전이 무한히 존재한다고 가정
손님에게 거슬러 주어야 할 돈이 N원일 때 거슬러 주어야 할 동전의 최소 개수는?
(단, 거슬러 줘야 할 돈 N은 항상 10의 배수)
n = 1260
count = 0
# 큰 단위의 화페부터 차례대로 확인하기
array = [500, 100, 50, 10]
for coin in array:
count += n // coin # 해당 화페로 거슬러 줄 수 있는 동전의 개수 세기
n %= coin
print(count)
# 6
어떠한 수 N이 1이 될 때까지 두 과정 중 하나를 반복적으로 선택하여 수행하려 함
1. N - 1
2. N // K (단, N이 K로 나누어 떨어질 때만 선택할 수 있음)
N과 K가 주어질 때 N이 될 때까지 1번 혹은 2을 수행해야 하는 최소 횟수는?
# N, K을 공백을 기준으로 구분하여 입력받기
n, k = map(int, input().split())
result = 0
while True:
# N이 K로 나누어 떨어지는 수가 될 때까지 빼기
target = (n // k) * k
result += (n - target)
n = target
# N이 K보다 작을 때 (더 이상 나눌 수 없을 때) 반복문 탈출
if n < k:
break
# K로 나누기
result += 1
n //= k
# 마지막으로 남은 수에 대하여 1씩 빼기
result += (n - 1)
print(result)
n, k = map(int,input().split())
cnt = 0
while(True):
if n%k!=0:
n-=1
else:
n//=k
cnt+=1
if n==1:
break
print(cnt)
숫자 사이에 'x' 혹은 '+' 연산자를 넣어 결과적으로 만들어질 수 있는 가장 큰 수는?
(단, 모든 연산은 왼쪽에서 부터 순서대로)
data = input()
# 첫 번째 문자를 숫자로 변경하여 대입
result = int(data[0])
for i in range(1, len(data)):
# 두 수 중에서 하나라도 '0' 혹은 '1'인 경우, 곱하기보다는 더하기 수행
num = int(data[i])
if num <= 1 or result <=1:
result += num
else:
result *= num
print(result)
공포도가 X인 모험가는 반드시 X명 이상으로 구성한 모험가 그룹에 참여해야 여행을 떠날 수 있도록 규정함
N명의 모험가 정보가 주어졌을때, 여행을 떠날 수 있는 그룹 수의 최댓값은?
n = int(input())
data = list(map(int, input().split()))
data.sort()
result = 0 # 총 그룹의 수
count = 0 # 현재 그룹에 포함된 모험가의 수
for i in data : # 공포도를 낮은 것부터 하나씩 확인하며
count += 1 # 현재 그룹에 해당 모험가를 포함시키기
if count >= i: # 현재 그룹에 포함된 모험가의 수가 현재의 공포도 이상이라면, 그룹 결성
result += 1 # 총 그룹의 수 증가시키기
count = 0 # 현재 글부에 포함된 모험가의 수 초기화
print(result) # 총 그룹의 수 출력
[이코테] 다이나믹 프로그래밍 (0) | 2021.03.28 |
---|---|
[이코테] 이진 탐색 알고리즘 (0) | 2021.03.28 |
[이코테] 정렬 알고리즘 (0) | 2021.03.28 |
[이코테] 그래프 탐색 알고리즘: DFS/BFS (0) | 2021.03.27 |
[이코테] 구현(Implementatation) (0) | 2021.03.27 |
댓글 영역