๋ฌธ์
https://school.programmers.co.kr/learn/courses/30/lessons/42885
ํ์ด
๋์ ํ์ด
# ํ๋ก๊ทธ๋๋จธ์ค 2๋จ๊ณ - ๊ทธ๋ฆฌ๋ - ๊ตฌ๋ช
๋ณดํธ
from collections import deque
def solution(people, limit):
answer = 0
people = deque(sorted(people, reverse = True)) # deque ์ ์ธ
while len(people) > 1:
if people[0] + people[-1] <= limit: # ์ ์ผ ๊ฐ๋ฒผ์ด ์ฌ๋๊ณผ ์ ์ผ ๋ฌด๊ฑฐ์ด ์ฌ๋์ด ๊ฐ์ด ํ ๊ฒฝ์ฐ
answer += 1
people.pop() # ๊ฐ๋ฒผ์ด ์ฌ๋ pop
people.popleft() # ๋ฌด๊ฑฐ์ด ์ฌ๋ popleft
else: # ๋ฌด๊ฑฐ์ด ์ฌ๋ ํผ์ ํ ๊ฒฝ์ฐ
answer += 1
people.popleft()
if people:
answer += 1
return answer
๋จผ์ ๊ตฌ๋ช ๋ณดํธ์ ์ต๋๋ก ํ ์ ์๋ ์ฌ๋์ด 2๋ช ์ด๋ผ๋ ์กฐ๊ฑด์ด ์๋ค.
๋ฐ๋ผ์ ๊ฐ์ฅ ๊ฐ๋ฒผ์ด ์ฌ๋๊ณผ ๊ฐ์ฅ ๋ฌด๊ฑฐ์ด ์ฌ๋์ ํ์ ์ ๋ ๊ตฌ๋ช ๋ณดํธ๋ฅผ ์ต์ํ ํ ์ ์๋ค.
์ด๋ฅผ ์ฝ๋๋ก ๊ตฌํํ๋ฉด people[0] + people[-1] <= limit ์ธ๋ฐ
๊ฐ์ฅ ๊ฐ๋ฒผ์ด ์ฌ๋๊ณผ ๊ฐ์ฅ ๋ฌด๊ฑฐ์ด ์ฌ๋์ด ๋ณดํธ์ ํ์ ๋ ๋ฌด๊ฒ๊ฐ limit ๋ณด๋ค ํฌ๋ค๋ฉด ์ด ๋ณดํธ๋ฅผ ํ ์ ์๋ค. ๋ฐ๋ผ์ ๊ทธ ๋ค์ ์ฌ๋์ ๋น๊ต๋ฅผ ํ์ง์์๋ ๋๊ณ ๊ฐ์ฅ ๋ฌด๊ฑฐ์ด ์ฌ๋์ ๋ณดํธ๋ฅผ ํผ์ ํ๊ฒ๋๋ ๊ฒ์ด๋ค.
๋ํ
์ด๋ฌํ ๋ก์ง์ ๋ฐํ์ผ๋ก ๊ตฌํ์ ํ์๋ค.
๋ค๋ฅธ์ฌ๋์ ํ์ด
def solution2(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