https://school.programmers.co.kr/learn/courses/30/lessons/150369
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
d_temp, p_temp 변수를 만들어주고 집을 끝에서부터 돌면서 택배를 배달/수거하는 대로 값을 증가시켰다.
두 변수가 cap보다 크다면 for문을 멈추고 n값을 갱신하여 다시 반복문을 돌도록 해주었다.
# 실패
# 프로그래머스 150369: 택배 배달과 수거하기 (2023 KAKAO BLIND RECRUITMENT)
def solution(cap, n, deliveries, pickups):
answer = 0
while n >= 1:
d_temp = 0
p_temp = 0
answer += n * 2
for i in range(n-1, -1, -1):
d_temp += deliveries[i]
p_temp += pickups[i]
if d_temp > cap:
deliveries[i] = d_temp - cap
n = i + 1
break
if p_temp > cap:
pickups[i] = p_temp - cap
n = i + 1
break
else:
return answer
return answer
테스트케이스는 다 맞았는데, 채점 결과는 10점이었다 (..ㅋ)
맨 마지막 집에 배달/수거할 택배가 없다면 틀린 알고리즘이라는 걸 깨닫고,
해당 조건일 때 n값을 감소시키는 부분을 추가했다.
# 실패
# 프로그래머스 150369: 택배 배달과 수거하기 (2023 KAKAO BLIND RECRUITMENT)
def solution(cap, n, deliveries, pickups):
answer = 0
while deliveries[n-1] == 0 and pickups[n-1] == 0:
n -= 1
while n >= 1:
d_temp = 0
p_temp = 0
answer += n * 2
for i in range(n-1, -1, -1):
d_temp += deliveries[i]
p_temp += pickups[i]
if d_temp > cap:
deliveries[i] = d_temp - cap
n = i + 1
break
if p_temp > cap:
pickups[i] = p_temp - cap
n = i + 1
break
else:
return answer
return answer
그리고 런타임 에러가 떴다. ㅎㅎ;;
그래서 질문하기 게시판을 보고,,, 똑똑한 알고리즘을 찾았다.
맨 마지막 집에서부터 시작해서 해당 집에 방문할 때
모든 택배가 배달/수거될 때까지 while문을 돌려 반복문을 돌린 횟수를 계산하여 해당 값을 곱해준다.
이렇게 하면 마지막 집에 택배가 없을 때의 케이스도 잡아낼 수 있다.
# 프로그래머스 150369: 택배 배달과 수거하기 (2023 KAKAO BLIND RECRUITMENT)
def solution(cap, n, deliveries, pickups):
answer = 0
d_temp = 0
p_temp = 0
for i in range(n-1, -1, -1):
cnt = 0
d_temp += deliveries[i]
p_temp += pickups[i]
while d_temp > 0 or p_temp > 0:
d_temp -= cap
p_temp -= cap
cnt += 1
answer += cnt * (i+1) * 2
return answer
👇 내가 썼던 테스트케이스
print(solution(4, 5, [1, 0, 3, 1, 2], [0, 3, 0, 4, 0])) # 16
print(solution(2, 7, [1, 0, 2, 0, 1, 0, 2], [0, 2, 0, 1, 0, 2, 0])) # 30
print(solution(2, 2, [0,0], [0,4])) # 8
print(solution(2, 2, [1,0], [1,0])) # 2
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스 | Lv2] k진수에서 소수 개수 구하기 (Python) - 2022 KAKAO BLIND RECRUITMENT (0) | 2023.03.01 |
---|---|
[프로그래머스 | Lv2] 주차 요금 계산 (Python) - 2022 KAKAO BLIND RECRUITMENT (0) | 2023.02.28 |
[프로그래머스 | Lv2] 두 큐 합 같게 만들기 (Python) - 2022 KAKAO TECH INTERNSHIP (0) | 2023.02.25 |
[프로그래머스 | Lv2] 이모티콘 할인행사 (Python) - 2023 KAKAO BLIND RECRUITMENT (0) | 2023.02.25 |
[프로그래머스 | Lv2] 롤케이크 자르기 (Python) (0) | 2023.02.07 |