๐Ÿ—๏ธ Algorithm/โฌ› ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

[Programmers] [ํƒ์š•๋ฒ•(Greedy)] [Python] Level2_๊ตฌ๋ช…๋ณดํŠธ

Dbswnstjd 2022. 10. 12. 04:40

๋ฌธ์ œ

https://school.programmers.co.kr/learn/courses/30/lessons/42885

 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

์ฝ”๋“œ ์ค‘์‹ฌ์˜ ๊ฐœ๋ฐœ์ž ์ฑ„์šฉ. ์Šคํƒ ๊ธฐ๋ฐ˜์˜ ํฌ์ง€์…˜ ๋งค์นญ. ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์˜ ๊ฐœ๋ฐœ์ž ๋งž์ถคํ˜• ํ”„๋กœํ•„์„ ๋“ฑ๋กํ•˜๊ณ , ๋‚˜์™€ ๊ธฐ์ˆ  ๊ถํ•ฉ์ด ์ž˜ ๋งž๋Š” ๊ธฐ์—…๋“ค์„ ๋งค์นญ ๋ฐ›์œผ์„ธ์š”.

programmers.co.kr

 

ํ’€์ด

๋‚˜์˜ ํ’€์ด 

# ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค 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