20260330 오늘의 학습: COS Pro 기출 1회차 풀이 (1~5번)

Yesol Lee·2026년 3월 30일

COS Python

목록 보기
11/30

어제 학습 요약

  • Phase 1 종합 복습 완료 — 딕셔너리+컴프리헨션, set 교집합, 다중 정렬 key 등 마무리
  • Phase 1 전 범위 종료, Phase 2 전환 준비 완료
  • 총 8회 세션, 67문제 풀이 (1차 정답률 84%)

오늘 수업 계획

Phase 2 첫 번째 세션. 구름EDU COS Pro 1급 기출 1회차 1~5번 문제를 직접 풀고 리뷰.
빈칸 채우기 3문제 + 함수 작성 2문제 구성.


학습 내용 정리

문제 1 — 음식전문점 운영 (빈칸 채우기)

클래스 상속 구조를 읽고 빈칸을 채우는 문제.

빈칸:

class PizzaStore(DeliveryStore):       # 1. 상속
    def set_order_list(self, order_list):  # 2. 추상 메서드 구현
    def get_total_price(self):             # 3. 추상 메서드 구현

Python 클래스 상속 문법 정리:

JavaPython
상속class Child extends Parentclass Child(Parent):
인터페이스 구현class A implements Bclass A(B): (동일 문법)
추상 메서드@Override같은 이름으로 그냥 정의 (시그니처 맞춰야 함)
추상 클래스 선언abstract classmetaclass=ABCMeta + @abstractmethod

핵심: Python에서 추상 메서드를 구현할 때는 self를 포함한 시그니처를 부모와 동일하게 맞춰야 한다.

이 문제에서 함수명은 바로 알았지만 상속 문법은 인터넷 검색 후 해결. → 별도 정리 필요 영역으로 기록.


문제 2 — 해밍 거리 구하기 (빈칸 채우기)

두 이진수 문자열의 해밍 거리(같은 위치에서 다른 문자 수)를 구하는 문제.
길이가 다르면 짧은 쪽 앞에 0을 채워 맞춤.

빈칸:

padSize = length - len(string)    # 채워야 할 0의 개수
if binaryA[i] != binaryB[i]:     # 같은 위치에서 다르면 해밍 거리 +1

막힘 없이 해결.


문제 3 — 계산기 by 문자열 (빈칸 채우기)

"123+12" 같은 문자열 수식을 받아 계산 결과를 return하는 문제.
func_a (계산), func_b (연산자 위치 탐색), func_c (숫자 분리) 세 함수가 주어지고, solution의 빈칸을 채우는 구조.

빈칸:

exp_index = func_b(expression)                          # 연산자 위치(인덱스)
first_num, second_num = func_c(expression, exp_index)   # 두 숫자 분리
result = func_a(first_num, second_num, expression[exp_index])  # 계산

수업 중 질문: 마지막 인자를 exp_index로 넣었더니 None이 출력됐어

exp_index는 연산자의 위치를 나타내는 숫자(int) 이고, func_a가 필요로 하는 건 '+', '-', '*' 같은 문자(str) 다.
expression[exp_index]로 인덱스 위치의 값을 꺼내야 한다.

exp_index = 3           # 숫자 — 위치
expression[exp_index]   # 문자 — 그 위치의 값 '+'

기억 포인트: 인덱스를 구했으면 값을 꺼낼 때 [인덱스]를 한 번 더 써줘야 한다.


문제 4 — 타임머신 (함수 작성)

0이 없는 수 체계(1, 2, ..., 9, 11, 12, ...)에서 주어진 수의 다음 수를 return하는 문제.

작성한 코드:

def solution(num):
    tmp_num = str(num + 1)
    answer = int(tmp_num.replace("0", "1"))
    return answer

왜 이게 맞는가?

num은 0이 없는 수이므로, num + 1을 하면 올림(carry)이 9를 타고 올라가면서 0은 반드시 뒤에서부터(suffix)만 생긴다.

예: 1899999 + 1 = 1900000
    └─ 뒤의 9들이 연쇄 올림 → suffix에만 0 생성

suffix의 0을 전부 1로 바꾸면 → 0 없는 수 중 가장 작은 다음 수가 된다.
replace("0", "1")이 항상 정답인 이유가 바로 이 입력 조건 덕분이다.


문제 5 — 소용돌이 수 (함수 작성)

n×n 격자에 1~n²을 소용돌이(나선) 순서로 채운 뒤, 주 대각선(좌상→우하) 값의 합을 return하는 문제.

작성한 코드 (핵심 구조):

def solution(n):
    if n == 1: return 1  # 엣지케이스

    grid = [[0]*n for _ in range(n)]
    dr = [0, 1, 0, -1]   # 우 하 좌 상
    dc = [1, 0, -1, 0]
    r, c, d = 0, 0, 0

    answer = 0
    for num in range(1, n*n+1):
        grid[r][c] = num
        if r == c:
            answer += num

        nr, nc = r + dr[d], c + dc[d]
        if nr < 0 or nr >= n or nc < 0 or nc >= n:
            d = (d+1) % 4
            nr, nc = r + dr[d], c + dc[d]
        if grid[nr][nc] != 0:
            d = (d+1) % 4
            nr, nc = r + dr[d], c + dc[d]
        r, c = nr, nc

    return answer

풀면서 실수한 포인트:

실수원인수정
d = 0 누락방향 초기값 빠트림그리드+4방향+시작점+현재방향 세트로 기억
range(n*n)0부터 시작해 합계 틀림range(1, n*n+1)
(d+1) % 4 헷갈림방향 순환 공식0→1→2→3→0 반복, 항상 % 4

대각선 조건: r == c 이면 주 대각선. 단순하고 정확한 판별식.

그리드 시뮬레이션 세팅 체크리스트:
1. 그리드 생성
2. 4방향 정의 (dr, dc)
3. 시작점 (r, c)
4. 현재 방향 (d = 0) ← 자주 빠트림!


오늘의 결과

  • 기출 1회차 1~5번 완료 (빈칸 3 + 함수 작성 2), 전부 최종 정답
  • 1차 실수: 문제 3 인덱스vs값 혼동, 문제 5 초기값 누락
  • 다음 시간: 기출 1회차 6~10번 + 클래스 상속/오버라이드 보충 정리
profile
문서화를 좋아하는 개발자

0개의 댓글