금액을 8가지 화폐(10원~50000원)로 거슬러줄 때 동전+지폐 개수의 합을 최소로 만드는 문제다.
"큰 단위부터 최대한 많이 쓰고, 나머지를 다음 단위로 넘긴다"는 전략이다. 이 문제처럼 화폐 단위가 배수 관계일 때 그리디가 최적해를 보장한다.
def solution(money):
coin = [10, 50, 100, 500, 1000, 5000, 10000, 50000]
counter = 0
idx = len(coin) - 1
while money:
counter += money // coin[idx] # 해당 화폐로 몇 개 거슬러줄 수 있는지
money %= coin[idx] # 나머지를 다음 화폐로 넘김
idx -= 1
return counter
처음에 counter += 1로 작성했다가, 50000원짜리를 0개 써도 카운터가 올라가는 문제를 발견했다. money // coin[idx]로 해당 화폐를 최대 몇 개 쓸 수 있는지 계산해야 한다.
배열의 앞/뒤에서 번갈아 가져와 새 배열을 만드는 문제다.
# 버그 코드
if left % 2 == 0: # left는 앞에서 가져올 때만 증가
# 수정
if idx % 2 == 0: # idx는 매 반복마다 증가 → 번갈아 동작
left는 앞에서 가져올 때만 증가하므로, 한 번 홀수가 되면 계속 뒤에서만 가져오게 된다. 매 반복마다 1씩 증가하는 idx를 기준으로 짝수/홀수를 판단해야 번갈아 동작한다.
비밀번호에 연속 3자리 이상의 알파벳이나 숫자(abc, 987 등)가 있으면 안전하지 않다고 판단하는 문제다.
# 버그 코드
first_check = ord(password[i + 1]) - ord(password[i])
second_check = ord(password[i]) - ord(password[i+1]) # first_check의 부호 반대일 뿐
# 수정
second_check = ord(password[i+2]) - ord(password[i+1]) # 다음 쌍의 차이
3연속을 판단하려면 연속된 두 쌍의 차이를 비교해야 한다:
배열에서 숫자가 연속해서 증가하는 가장 긴 구간의 길이를 구하는 문제다. 같은 값은 증가로 치지 않는다.
def solution(arr):
answer = 0
tmp_answer = 1
std_num = arr[0]
for i in range(1, len(arr)):
if arr[i] > std_num:
tmp_answer += 1
else:
tmp_answer = 1
answer = max(answer, tmp_answer) # 매 반복마다 갱신!
std_num = arr[i]
return answer
수업 중 질문: 처음에 answer = max(answer, tmp_answer)를 else 블록 안에만 넣었더니, 배열 끝까지 증가하는 경우 answer가 갱신되지 않는 문제가 있었다. → for 루프 안, if/else 바깥으로 옮겨서 매 반복마다 최댓값을 갱신하도록 수정했다.
명령 문자열(L, R, U, D)에 따라 로봇을 이동시킨 최종 위치를 반환하는 문제다.
from collections import Counter
def solution(commands):
x, y = 0, 0
dir = Counter(commands)
for key, value in dir.items():
if key == "L":
x -= value
if key == "R":
x += value
if key == "U":
y += value
if key == "D":
y -= value
return [x, y]
Counter로 각 방향의 횟수를 한 번에 세서 처리하는 방식으로 풀었다. 이 문제는 이동 순서와 상관없이 최종 위치만 구하면 되기 때문에 Counter 방식이 유효하다. 만약 이동 경로를 추적해야 했다면 한 글자씩 순회해야 한다.
구름EDU 기출 6세트의 활용 계획을 정리했다:
| 회차 | 용도 | 시기 |
|---|---|---|
| 1~2회차 | ✅ 학습용 완료 | 완료 |
| 3~4회차 | 학습용 (개념 설명 + 풀이) | 4월 중 |
| 5회차 | 90분 타이머 모의고사 | 시험 2주 전 (5월 초) |
| 6회차 | 90분 타이머 모의고사 | 시험 1주 전 (5월 둘째 주) |
3~4회차 사이에는 프로그래머스, 백준 등 외부 플랫폼으로 추가 연습을 병행할 예정이다.