[코딩테스트 기초 02] 반복문과 return으로 조건을 만족하는 원소 개수 세기

차곡코딩·2026년 9월 21일

날짜별 공부 시간에서 하루 목표 이상인 기록의 개수를 구하는 함수형 문제다. 반복문의 누적 처리, 비교 연산자의 경계, 반환문의 위치를 중심으로 정리한다. 프로그래머스 기초 학습과 연계한 자체 예제이며, 특정 문제의 풀이는 아니다.

1. 문제 조건

공부 시간 리스트 minutes와 하루 목표 target이 주어진다. 목표 이상 공부한 날의 수를 반환하는 solution 함수를 작성한다.

  • minutes의 길이: 0 이상 10,000 이하
  • 각 공부 시간과 target: 0 이상 1,440 이하의 정수
  • 같은 시간이 여러 번 등장해도 서로 다른 날의 기록으로 센다.
minutes = [15, 40, 25, 40, 5]
target = 25
# 기대 반환값: 3

조건을 만족하는 기록은 40, 25, 40이다. ‘목표 이상’이므로 목표와 같은 25도 포함한다.

2. 반복문을 이용한 구현

def solution(minutes, target):
    count = 0
    for minute in minutes:
        if minute >= target:
            count += 1
    return count

count를 0으로 초기화하고 각 원소를 한 번씩 확인한다. 조건을 만족할 때만 1을 더하면, 반복이 끝난 시점의 count가 목표를 달성한 날의 수가 된다.

비교 연산자는 >가 아니라 >=다. >를 사용하면 목표와 정확히 같은 기록이 누락된다.

3. print와 return, 반환 위치의 차이

print()는 화면에 값을 출력하고, return은 함수를 호출한 곳에 값을 전달한다. 이 문제는 결과를 반환해야 하므로 함수 안에서는 return을 사용한다.

result = solution([15, 40, 25, 40, 5], 25)
print(result)  # 3

return count는 반복문 바깥에 둔다. 반복문 안에 두면 전체 기록을 확인하기 전에 함수가 종료될 수 있다. 들여쓰기는 코드의 모양이 아니라 실행 범위를 결정한다.

4. 경계 조건

공부 시간목표결과확인 사항
[15, 40, 25, 40, 5]253일반 입력과 중복 기록
[]250빈 리스트
[24, 25, 26]252목표 직전·일치·초과
[0, 0]02목표가 0인 경우

빈 리스트에서는 반복문이 실행되지 않아 초기값 0이 반환된다. 목표가 0이면 기록된 두 날 모두 조건을 만족한다. 별도 예외 처리 없이도 문제의 정의에 맞는 결과가 나온다. 표는 자체 예제의 기대 결과이며, 사이트 채점 기록은 아니다.

5. 제너레이터 표현식과 복잡도

def solution(minutes, target):
    return sum(1 for minute in minutes if minute >= target)

조건을 만족하는 원소마다 1을 생성해 합산하는 방식이다. 중간 결과 리스트를 만들지 않는 제너레이터 표현식을 사용한다.

두 구현 모두 원소 n개를 한 번씩 확인하므로 시간 복잡도는 O(n), 입력을 제외한 추가 공간 복잡도는 O(1)이다. 핵심은 코드 길이가 아니라 경계값을 포함하는지, 모든 원소를 확인한 뒤 반환하는지에 있다.

참고 문서

profile
비전공자의 개발 성장 기록. 바이브코딩 프리랜서 경험부터 Python·SQL·AI 서비스 개발까지

0개의 댓글