일단 출제된 문제 그대로 작성하였으나 역시나 효율성에서 탈락
def solution(people, limit):
answer = 0
sorted_people = sorted(people, reverse=True)
while True:
# 반복문 종료조건
length = len(sorted_people)
if length <= 1:
answer += length
break;
# 혼자서 탈 수 밖에 없는 무게
if sorted_people[0] + sorted_people[-1] > limit:
count = sorted_people.count(sorted_people[0])
answer += count
sorted_people = sorted_people[count:]
# 짝 지어주기
else:
answer += 1
sorted_people = sorted_people[1:-1]
return answer
매 반복마다 일부만 slice 된 배열을 다시 대입하는 점이 과하다 판단되어 slice 대신 left와 right값을 변수로 만들어 조정하는 방식을 사용하여 아래와 같이 해결
def solution(people, limit):
answer = 0
sorted_people = sorted(people, reverse=True)
left = 0
right = len(sorted_people)-1
while True:
length = right - left + 1
# 반복문 종료조건
if length <= 1:
answer += length
break
# 혼자서 탈 수 밖에 없는 무게
if sorted_people[left] + sorted_people[right] > limit:
answer += 1
left += 1
# 짝 지어주기
else:
answer += 1
left += 1
right -= 1
return answer
'Algorithm' 카테고리의 다른 글
[Programmers] 120814.py 피자 나눠 먹기 (1) (0) | 2023.06.08 |
---|---|
[Programmers] 138477.py 명예의 전당 (1) (0) | 2023.06.08 |
[Programmers] 135808.py 과일 장수 (0) | 2023.06.07 |
[Programmers] 132267.py 콜라 문제 (0) | 2023.06.03 |
[Programmers] 12981.py 영어 끝말잇기 (0) | 2023.05.31 |