원리: 원리는 간단히 people에 있는 가장큰수와 가장 작은수를 비교해서 limit이하면 score를 +1해준다.
def solution(people, limit): people.sort(reverse= True) score = 0 boat = [] while people: p = people.pop(0) boat.append(p) while True: if people and sum(boat) + people[-1] <= limit: boat.append(people.pop()) else: break if people: boat = [] score += 1 else: score += 1 break return score
이렇게 하면 답은 맞지만 시간 초과가 난다...
from collections import deque . def solution(people, limit): boat = 0 people.sort() # 보트는 2명씩만 탈 수 있고 무게 제한도 있음. q = deque(people) . while q: if len(q) >= 2: if q[0] + q[-1] <= limit: q.pop() q.popleft() boat += 1 elif q[0] + q[-1] > limit: q.pop() boat += 1 else: if q[0] <= limit: q.pop() boat += 1 return boat
나의 풀이와 원리는 같지만 deque를 이용하여 시간을 줄 일 수 있고 좀더 간단하게 풀이하였다.
def solution(people, limit) : answer = 0 people.sort() a = 0 b = len(people) - 1 . while a < b : if people[b] + people[a] <= limit : a += 1 answer += 1 b -= 1 return len(people) - answer
이것또한 원리는 같지만 훨씬 읽기 편하다.
특히, len(people) - answer로 인해 남은 수에대한 처리가 훨씬 깔끔해졌다.bb