Notice
Recent Posts
Recent Comments
Link
REC
프로그래머스 스택/큐: 기능개발 - Python 풀이 본문
SMALL
오늘의 문제
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
내 풀이
def solution(progresses, speeds):
answer = []
cnt = 0
while progresses: # 빈 배열이 아니라면 반복
while progresses and progresses[0] >= 100: # 빈 배열이 아니고 첫 번째 값이 100 이상일 때
progresses.pop(0) # 첫 번째 값 제거
speeds.pop(0) # 첫 번째 값의 속도도 제거
cnt += 1 # 카운트 1 증가
if cnt != 0: # 카운트 된 게 있다면
answer.append(cnt) # 답안에 추가
cnt = 0 # 카운트 초기화
progresses = [x + y for x, y in zip(progresses, speeds)] # progresses 값에 speeds 값을 더한 리스트로 업데이트
return answer
포인트 1) 두 리스트(progresses, speeeds)의 각 요소의 값을 더하기 위해 리스트 컴프리헨션과 zip 함수를 사용했다.
- zip 함수는 두 리스트를 동시에 순회한다. 리스트가 다른 길이를 가질 경우, 짧은 리스트를 기준으로 동작한다.
- 두 리스트를 동시에 돌면서 x와 y값을 가져오고 이를 합친 x + y 값으로 리스트를 만든다.
- 그리고 그 값을 progresses에 할당하여, progresses의 값에 speeds를 합친 값으로 progresses를 업데이트 한다.
포인트 2) 2번째 while문에서 progresses[0]의 값이 100이 넘는지를 확인하고 progresses가 빈 배열이 아닌지도! 체크해야 한다.
- while문 안에서 pop을 해주고 있기 때문에 이 조건을 추가하지 않으면 progresses[0]에 접근할 때 IndexError가 발생할 수 있다.
LIST
'Algorithm' 카테고리의 다른 글
| 프로그래머스 Lv.2: 주식가격 - Python 풀이 (1) | 2025.01.15 |
|---|---|
| 백준 1406번: 에디터 - Python 풀이 (0) | 2025.01.14 |
| 백준 11047번: 동전 0 - Python 풀이 (1) | 2024.12.08 |
| 백준 1463번: 1로 만들기 - Swift 풀이 (0) | 2024.12.05 |
| 백준 1654번: 랜선 자르기 - Swift 풀이 (0) | 2024.11.10 |