20260402 오늘의 학습: COS Pro 기출 2회차 풀이 (1~4, 10번)

Yesol Lee·2026년 4월 2일

COS Python

목록 보기
13/21

지난 학습 요약

  • 구름EDU 기출 1회차 6~10번 풀이 완료 (빈칸 1 + 디버깅 3 + 함수 작성 1)
  • & vs and 혼동, 범위 체크 불일치 등 실수 포인트 정리
  • ord(), max(0, x) 패턴 새로 학습

오늘 수업 계획

  • 구름EDU 기출 2회차 시작
  • 새로운 개념(클래스 상속, itertools.combinations)이 등장하면 설명 먼저 → 응용문제 풀기

학습 내용 정리

1. 클래스 상속과 추상 클래스 (문제 1: 도서 대여점 운영)

기출 1번 문제에서 추상 클래스와 상속 개념이 처음 등장했다. Java의 interface/abstract class와 같은 개념이다.

추상 클래스 만들기

from abc import ABC, abstractmethod

class Book(ABC):               # ABC를 상속 = 추상 클래스
    @abstractmethod            # 자식이 반드시 구현해야 하는 메서드
    def get_rental_price(self, day):
        pass
  • ABC = Abstract Base Class
  • @abstractmethod = Java의 abstract 키워드와 동일
  • 추상 클래스는 직접 객체 생성 불가 (Book()하면 에러)

문제 코드에서는 metaclass=ABCMeta 방식이 사용되었는데, ABC를 상속하는 것과 동일한 의미이다.

# 방법 1: metaclass 직접 지정 (기출 코드 방식)
class Book(metaclass=ABCMeta):
    ...

# 방법 2: ABC 상속 (더 간단, 실무에서 주로 사용)
class Book(ABC):
    ...

상속 문법

# Java:   class ComicBook extends Book
# Python: class ComicBook(Book)
class ComicBook(Book):
    def get_rental_price(self, day):   # 추상 메서드 구현
        cost = 500
        day -= 2
        if day > 0:
            cost += day * 200
        return cost

응용문제로 연습 (주차장 요금 계산)

같은 구조로 Vehicle 추상 클래스 → SmallCar, LargeCar 상속 문제를 풀었다. 기출 구조를 그대로 응용해서 직접 클래스를 작성하고 solution 함수까지 완성했다.

주의: type은 Python 내장 함수명이라 변수명으로 쓰면 내장 type()을 덮어쓴다. car_type 같은 이름이 안전하다. (이전에 sum을 변수명으로 쓴 것과 같은 패턴!)

2. 시간 → 분 변환 (문제 2: 지하철 기다리기)

빈칸 채우기 문제. "HH:MM" 문자열을 분 단위 정수로 변환하는 func_a가 핵심이었다.

def func_a(times):
    hour = int(times[:2])
    minute = int(times[3:])
    return hour * 60 + minute

도착 시간이 순서대로 정렬되어 있으므로, 현재 시간 이후인 첫 번째 지하철을 찾으면 바로 break하는 패턴이다.

3. 이름 없는 함수 역할 파악 (문제 3: 경품 당첨자를 구해주세요)

func_a, func_b, func_c처럼 이름만으로 역할을 알 수 없는 함수가 나오는 빈칸 채우기 문제.

역할 파악 팁: 간단한 값을 넣어서 결과를 머릿속으로 돌려보기

함수동작예시
func_a(n)10^n (10을 n번 곱함)func_a(3) → 1000
func_b(n)자릿수 구하기 (n //= 10 + 카운트)func_b(235) → 3
func_c(n)각 자릿수 합 (n % 10 + 누적합)func_c(235) → 10

자주 나오는 숫자 처리 패턴:

패턴동작
n //= 10 + 카운트자릿수 구하기
n % 10 + 누적합각 자릿수 합
10을 반복 곱하기10의 거듭제곱
n % 10 + 역순 조립숫자 뒤집기

수업 중 질문: "func_a, func_b, func_c 역할 파악하는데 시간이 오래 걸렸어"
→ 코드를 한 줄씩 읽기 전에 간단한 값을 넣어서 입출력을 먼저 확인하면 빠르게 파악할 수 있다. 이런 패턴은 반복 출제되므로 몇 번 더 보면 코드 읽기 전에 바로 알아볼 수 있게 된다.

: length / 2는 Python 3에서 float가 된다 (예: 6 / 2 → 3.0). 정수 나눗셈 //를 쓰는 습관을 들이자.

4. itertools.combinations (문제 4: 합이 K배가 되는 수)

함수 작성 문제에서 itertools.combinations가 처음 등장했다. 배열에서 n개를 뽑는 모든 조합을 구하는 도구이다.

from itertools import combinations

arr = [1, 2, 3, 4, 5]
for combo in combinations(arr, 3):   # 3개씩 뽑기
    print(combo)
# (1, 2, 3), (1, 2, 4), (1, 2, 5), ...

Java로 비유하면 for문 3중첩으로 조합을 구하는 걸 한 줄로 해주는 것이다.

// Java: 3중 for문
for (int i = 0; i < n; i++)
    for (int j = i+1; j < n; j++)
        for (int k = j+1; k < n; k++)
# Python: 한 줄
for combo in combinations(arr, 3)

실수 포인트: combinations(arr, K)로 썼다가 교정했다. K=3이라 우연히 맞았지만, K는 배수 조건(변수)이고 뽑는 개수는 3(상수)이다. 문제에서 변수와 상수를 정확히 구분하자!

from itertools import combinations

def solution(arr, K):
    answer = 0
    for combo in combinations(arr, 3):    # 3개 뽑기 (상수!)
        if sum(combo) % K == 0:           # K의 배수 (변수!)
            answer += 1
    return answer

5. 디버깅: else에서 조건부 처리 (문제 10: 0들을 0으로 만들기)

연속된 0을 하나의 0으로 압축하는 디버깅 문제. 한 줄만 수정해야 한다.

# 버그 코드
if s[i] == '0' and s[i + 1] != '0':
    answer += '0'       # 연속 0의 마지막 → 0 추가 (정상)
else:
    answer += '1'       # 버그! 무조건 '1' 추가

else에 들어오는 경우가 세 가지 섞여있었다:

  • s[i] == '1''1' 추가해야 함
  • s[i] == '0' (연속 0) → 아무것도 안 해야 함
  • s[i] == '#' (끝 표시) → 아무것도 안 해야 함

수정: 11행을 if s[i] == '1': answer += '1'로 변경

else:
    if s[i] == '1': answer += '1'   # '1'일 때만 추가, 나머지는 자동 패스

Python은 한 줄에 if 조건: 동작을 쓸 수 있어서 한 줄 수정으로 해결 가능하다.

수업 중 질문: "else: if 대신 그냥 if만 쓰거나, elif를 써도 똑같지 않아?"
→ 안 된다! 11행은 else: 블록 안에 있는 코드라서, elif로 바꾸려면 else:(10행)도 지워야 해서 두 줄 수정이 된다. 독립 if도 마찬가지.

디버깅 팁: else에서 무조건 고정값을 넣는 코드가 보이면 의심하자!

6. -= 공백 실수 주의

응용문제에서 발견한 실수:

hours -= 1   # hours = hours - 1  (3 → 2) ✅
hours = -1   # hours에 -1 대입     (3 → -1) ❌

+=는 헷갈릴 일이 없지만, -=는 공백 하나로 의미가 완전히 바뀐다. 시험에서는 반드시 붙여서 쓰자!


오늘의 결과

  • 기출 2회차 5문제 + 응용 1문제 풀이, 1차 정답률 83% (5/6)
  • 클래스 상속, itertools.combinations 새로 학습
  • 다음 시간: 기출 2회차 5~9번 마무리 → 함수작성 응용문제
profile
문서화를 좋아하는 개발자

0개의 댓글