날짜별 공부 시간에서 하루 목표 이상인 기록의 개수를 구하는 함수형 문제다. 반복문의 누적 처리, 비교 연산자의 경계, 반환문의 위치를 중심으로 정리한다. 프로그래머스 기초 학습과 연계한 자체 예제이며, 특정 문제의 풀이는 아니다.
공부 시간 리스트 minutes와 하루 목표 target이 주어진다. 목표 이상 공부한 날의 수를 반환하는 solution 함수를 작성한다.
minutes의 길이: 0 이상 10,000 이하target: 0 이상 1,440 이하의 정수minutes = [15, 40, 25, 40, 5]
target = 25
# 기대 반환값: 3
조건을 만족하는 기록은 40, 25, 40이다. ‘목표 이상’이므로 목표와 같은 25도 포함한다.
def solution(minutes, target):
count = 0
for minute in minutes:
if minute >= target:
count += 1
return count
count를 0으로 초기화하고 각 원소를 한 번씩 확인한다. 조건을 만족할 때만 1을 더하면, 반복이 끝난 시점의 count가 목표를 달성한 날의 수가 된다.
비교 연산자는 >가 아니라 >=다. >를 사용하면 목표와 정확히 같은 기록이 누락된다.
print()는 화면에 값을 출력하고, return은 함수를 호출한 곳에 값을 전달한다. 이 문제는 결과를 반환해야 하므로 함수 안에서는 return을 사용한다.
result = solution([15, 40, 25, 40, 5], 25)
print(result) # 3
return count는 반복문 바깥에 둔다. 반복문 안에 두면 전체 기록을 확인하기 전에 함수가 종료될 수 있다. 들여쓰기는 코드의 모양이 아니라 실행 범위를 결정한다.
| 공부 시간 | 목표 | 결과 | 확인 사항 |
|---|---|---|---|
[15, 40, 25, 40, 5] | 25 | 3 | 일반 입력과 중복 기록 |
[] | 25 | 0 | 빈 리스트 |
[24, 25, 26] | 25 | 2 | 목표 직전·일치·초과 |
[0, 0] | 0 | 2 | 목표가 0인 경우 |
빈 리스트에서는 반복문이 실행되지 않아 초기값 0이 반환된다. 목표가 0이면 기록된 두 날 모두 조건을 만족한다. 별도 예외 처리 없이도 문제의 정의에 맞는 결과가 나온다. 표는 자체 예제의 기대 결과이며, 사이트 채점 기록은 아니다.
def solution(minutes, target):
return sum(1 for minute in minutes if minute >= target)
조건을 만족하는 원소마다 1을 생성해 합산하는 방식이다. 중간 결과 리스트를 만들지 않는 제너레이터 표현식을 사용한다.
두 구현 모두 원소 n개를 한 번씩 확인하므로 시간 복잡도는 O(n), 입력을 제외한 추가 공간 복잡도는 O(1)이다. 핵심은 코드 길이가 아니라 경계값을 포함하는지, 모든 원소를 확인한 뒤 반환하는지에 있다.