๐Ÿ’ก๋ฌธ์ œ ๋ถ„์„ ์š”์•ฝ

๋ฌด์ธ๋„์— ๊ฐ‡ํžŒ ์‚ฌ๋žŒ๋“ค์„ ๊ตฌ๋ช…๋ณดํŠธ๋ฅผ ์ด์šฉํ•˜์—ฌ ๊ตฌ์ถœํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ๊ตฌ๋ช…๋ณดํŠธ๋Š” ์ž‘์•„์„œ ํ•œ ๋ฒˆ์— ์ตœ๋Œ€ย 2๋ช…์”ฉ ๋ฐ–์— ํƒˆ ์ˆ˜ ์—†๊ณ , ๋ฌด๊ฒŒ ์ œํ•œ๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ตฌ๋ช…๋ณดํŠธ๋ฅผ ์ตœ๋Œ€ํ•œ ์ ๊ฒŒ ์‚ฌ์šฉํ•˜์—ฌ ๋ชจ๋“  ์‚ฌ๋žŒ์„ ๊ตฌ์ถœํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

์‚ฌ๋žŒ๋“ค์˜ ๋ชธ๋ฌด๊ฒŒ๋ฅผ ๋‹ด์€ ๋ฐฐ์—ด people๊ณผ ๊ตฌ๋ช…๋ณดํŠธ์˜ ๋ฌด๊ฒŒ ์ œํ•œ limit๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์งˆ ๋•Œ, ๋ชจ๋“  ์‚ฌ๋žŒ์„ ๊ตฌ์ถœํ•˜๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ๊ตฌ๋ช…๋ณดํŠธ ๊ฐœ์ˆ˜์˜ ์ตœ์†Ÿ๊ฐ’์„ return

์ž…์ถœ๋ ฅ ์˜ˆ

people limit return
[70, 50, 80, 50] 100 3
[70, 80, 50] 100 3

๐Ÿ’ก์•Œ๊ณ ๋ฆฌ์ฆ˜ ์„ค๊ณ„

์šฐ์„  ์ฃผ์–ด์ง„ people ๋ฐฐ์—ด์„ sortํ•˜์—ฌ ๋ชธ๋ฌด๊ฒŒ๊ฐ€ ์ž‘์€ ์ˆœ์œผ๋กœ ์ •๋ ฌ๋˜๊ฒŒ ํ•œ๋‹ค.

ํ•œ ๊ตฌ๋ช…๋ณดํŠธ์— 2๋ช…๊นŒ์ง€๋งŒ ํƒˆ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, ๊ตฌ๋ช…๋ณดํŠธ์— ๋จผ์ € ์ œ์ผ ๋ฌด๊ฑฐ์šด ์‚ฌ๋žŒ์„ ํƒœ์šฐ๊ณ , ๊ทธ ๋‹ค์Œ ์ œ์ผ ๊ฐ€๋ฒผ์šด ์‚ฌ๋žŒ์„ ํƒœ์šด๋‹ค.

๊ฐ€์žฅ ๋ฌด๊ฑฐ์šด ์‚ฌ๋žŒ๊ณผ ๊ฐ€์žฅ ๊ฐ€๋ฒผ์šด ์‚ฌ๋žŒ์ด ๋ฌด๊ฒŒ ์ œํ•œ์„ ๋„˜๊ธธ ๊ฒฝ์šฐ ๊ฐ€์žฅ ๊ฐ€๋ฒผ์šด ์‚ฌ๋žŒ์€ ํƒœ์šฐ์ง€ ๋ชปํ•˜๊ณ  ๋„˜์–ด๊ฐ„๋‹ค.

๊ฐ€์žฅ ๊ฐ€๋ฒผ์šด ์‚ฌ๋žŒ์˜ ์œ„์น˜๋ฅผ ํ‘œ์‹œํ•˜๋Š” ์ธ๋ฑ์Šค first์™€ ๊ฐ€์žฅ ๋ฌด๊ฑฐ์šด ์‚ฌ๋žŒ์˜ ์œ„์น˜๋ฅผ ํ‘œ์‹œํ•˜๋Š” ์ธ๋ฑ์Šค last๋ฅผ ์„ค์ •ํ•˜๊ณ , ์‚ฌ๋žŒ์„ ํƒœ์šธ ๊ฒฝ์šฐ first++, lastโ€” ์ฒ˜๋ฆฌ ํ›„ last์™€ first๊ฐ€ ๊ฐ™์•„์ง€๋ฉด ๊ทธ๋งŒ ๊ณ„์‚ฐํ•œ๋‹ค.

๐Ÿ’ก์ฝ”๋“œ

def solution(people, limit):
    people.sort()
    answer = 0
    last=len(people)-1
    
    # ๋ฌด๊ฑฐ์šด ์‚ฌ๋žŒ ๋จผ์ € ํƒœ์šฐ๊ธฐ
    first=0
    
    while last-first>=0:
        answer+=1
        
        if people[last]+people[first]<=limit:
            first+=1
            
        last-=1

    return answer

๐Ÿ’ก์‹œ๊ฐ„๋ณต์žก๋„

people ์ •๋ ฌ โ†’ O(nlogn)

์ธ๋ฑ์Šค, ๋ณ€์ˆ˜ ์„ ์–ธ โ†’ O(1)

while๋ฌธ โ†’ O(n)