해결 과정
그대로 풀었는데, max() 함수 내에 빈 리스트가 들어오면 다음과 같은 런타임 에러가 발생한다.
ValueError: max() arg is an empty sequence
테스트케이스 2, 5, 18번 런타임 에러 수정하면서 코드 고치니 정답. 근데 좀 간결하게 할 순 없는지 살펴보자.
나의 풀이
def solution(priorities, location):
answer = 0
tupleList = [(v, k) for v, k in enumerate(priorities)]
while tupleList:
temp = tupleList.pop(0)
if len(tupleList) == 0:
answer += 1
break
if temp[1] < max([y for (x, y) in tupleList]):
tupleList.append(temp)
else:
answer += 1
if temp[0] == location:
break
return answer
조금 더 간결하게 풀고 싶다면, 다음과 같이 max 내에 [0] 까지 포함해주기. 결과에는 영향을 미치지 않는다.
def solution(priorities, location):
answer = 0
tupleList = [(v, k) for v, k in enumerate(priorities)]
while tupleList:
temp = tupleList.pop(0)
if temp[1] < max([y for (x, y) in tupleList] + [0]):
tupleList.append(temp)
else:
answer += 1
if temp[0] == location:
break
return answer
더보기
처음 풀이
def solution(priorities, location):
answer = 0
tupleList = [(v, k) for v, k in enumerate(priorities)]
answerList = []
while tupleList:
temp = tupleList.pop(0)
if len(tupleList) == 0:
answer += 1
break
if temp[1] < max([y for (x, y) in tupleList]):
tupleList.append(temp)
else:
answerList.append(temp)
answer += 1
if temp[0] == location:
break
return answer
answer += 1 할거라면, answerList는 굳이 필요없다.
다른 풀이
def solution(priorities, location):
queue = [(i,p) for i,p in enumerate(priorities)]
answer = 0
while True:
cur = queue.pop(0)
if any(cur[1] < q[1] for q in queue):
queue.append(cur)
else:
answer += 1
if cur[0] == location:
return answer
python의 any()
IDEA
python의 max()
max()의 파라미터에는 빈 리스트가 오면 안된다.
python의 any()
'Coding Test > 문제 풀이' 카테고리의 다른 글
[문제 풀이] N으로 표현 (0) | 2022.03.07 |
---|---|
[문제 풀이] 튜플 (0) | 2022.03.04 |
[문제 풀이] 여행경로 (0) | 2022.03.03 |
[문제 풀이] 더 맵게 (0) | 2022.03.02 |
[문제 풀이] 수식 최대화 (0) | 2022.02.24 |