20260406 오늘의 학습: COS Pro 기출 2회차 완료

Yesol Lee·2026년 4월 6일

COS Python

목록 보기
14/20

지난 학습 요약

  • 구름EDU 기출 2회차 1~4번, 10번 풀이 완료
  • 클래스 상속/추상 클래스, itertools.combinations 새로 학습
  • combinations에서 상수/변수 혼동 실수 1건 (힌트 후 교정)

오늘 수업 계획

  • 구름EDU 기출 2회차 나머지 5~9번 마무리
  • 2회차 완료 후 학습 일정 점검

학습 내용 정리

1. 거스름돈 구하기 — 빈칸 채우기 (문제 7)

금액을 8가지 화폐(10원~50000원)로 거슬러줄 때 동전+지폐 개수의 합을 최소로 만드는 문제다.

그리디(Greedy) 알고리즘

"큰 단위부터 최대한 많이 쓰고, 나머지를 다음 단위로 넘긴다"는 전략이다. 이 문제처럼 화폐 단위가 배수 관계일 때 그리디가 최적해를 보장한다.

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]로 해당 화폐를 최대 몇 개 쓸 수 있는지 계산해야 한다.

2. 규칙에 맞는 배열 구하기 — 디버깅 (문제 8)

배열의 앞/뒤에서 번갈아 가져와 새 배열을 만드는 문제다.

# 버그 코드
if left % 2 == 0:    # left는 앞에서 가져올 때만 증가

# 수정
if idx % 2 == 0:     # idx는 매 반복마다 증가 → 번갈아 동작

left는 앞에서 가져올 때만 증가하므로, 한 번 홀수가 되면 계속 뒤에서만 가져오게 된다. 매 반복마다 1씩 증가하는 idx를 기준으로 짝수/홀수를 판단해야 번갈아 동작한다.

3. 비밀번호 검사 — 디버깅 (문제 9)

비밀번호에 연속 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연속을 판단하려면 연속된 두 쌍의 차이를 비교해야 한다:

  • i→i+1 차이와 i+1→i+2 차이가 같고, 그 값이 ±1이면 3연속이다.

4. 언제까지 오르막길이야 — 함수 작성 (문제 5)

배열에서 숫자가 연속해서 증가하는 가장 긴 구간의 길이를 구하는 문제다. 같은 값은 증가로 치지 않는다.

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 바깥으로 옮겨서 매 반복마다 최댓값을 갱신하도록 수정했다.

5. 로봇을 움직여주세요 — 함수 작성 (문제 6)

명령 문자열(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회차 사이에는 프로그래머스, 백준 등 외부 플랫폼으로 추가 연습을 병행할 예정이다.


오늘의 결과

  • 기출 2회차 5~9번 완료 → 2회차 전체 완료 (빈칸 1 + 디버깅 2 + 함수 작성 2)
  • 힌트 1회 (오르막길 문제: 루프 종료 후 answer 갱신 누락)
  • 다음 학습: 구름EDU 기출 3회차 시작
profile
문서화를 좋아하는 개발자

0개의 댓글