๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ’ป DEV/ใ„ด problems

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ํƒ์š•๋ฒ•(Greedy) : ๊ตฌ๋ช…๋ณดํŠธ

by vodkassi 2021. 7. 13.
728x90

๋ฌธ์ œ ์„ค๋ช…

 

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

 

์˜ˆ๋ฅผ ๋“ค์–ด, ์‚ฌ๋žŒ๋“ค์˜ ๋ชธ๋ฌด๊ฒŒ๊ฐ€ [70kg, 50kg, 80kg, 50kg]์ด๊ณ  ๊ตฌ๋ช…๋ณดํŠธ์˜ ๋ฌด๊ฒŒ ์ œํ•œ์ด 100kg์ด๋ผ๋ฉด 2๋ฒˆ์งธ ์‚ฌ๋žŒ๊ณผ 4๋ฒˆ์งธ ์‚ฌ๋žŒ์€ ๊ฐ™์ด ํƒˆ ์ˆ˜ ์žˆ์ง€๋งŒ 1๋ฒˆ์งธ ์‚ฌ๋žŒ๊ณผ 3๋ฒˆ์งธ ์‚ฌ๋žŒ์˜ ๋ฌด๊ฒŒ์˜ ํ•ฉ์€ 150kg์ด๋ฏ€๋กœ ๊ตฌ๋ช…๋ณดํŠธ์˜ ๋ฌด๊ฒŒ ์ œํ•œ์„ ์ดˆ๊ณผํ•˜์—ฌ ๊ฐ™์ด ํƒˆ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

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

 

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

 


์ œํ•œ ์‚ฌํ•ญ

 

  • ๋ฌด์ธ๋„์— ๊ฐ‡ํžŒ ์‚ฌ๋žŒ์€ 1๋ช… ์ด์ƒ 50,000๋ช… ์ดํ•˜์ž…๋‹ˆ๋‹ค.
  • ๊ฐ ์‚ฌ๋žŒ์˜ ๋ชธ๋ฌด๊ฒŒ๋Š” 40kg ์ด์ƒ 240kg ์ดํ•˜์ž…๋‹ˆ๋‹ค.
  • ๊ตฌ๋ช…๋ณดํŠธ์˜ ๋ฌด๊ฒŒ ์ œํ•œ์€ 40kg ์ด์ƒ 240kg ์ดํ•˜์ž…๋‹ˆ๋‹ค.
  • ๊ตฌ๋ช…๋ณดํŠธ์˜ ๋ฌด๊ฒŒ ์ œํ•œ์€ ํ•ญ์ƒ ์‚ฌ๋žŒ๋“ค์˜ ๋ชธ๋ฌด๊ฒŒ ์ค‘ ์ตœ๋Œ“๊ฐ’๋ณด๋‹ค ํฌ๊ฒŒ ์ฃผ์–ด์ง€๋ฏ€๋กœ ์‚ฌ๋žŒ๋“ค์„ ๊ตฌ์ถœํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ๋Š” ์—†์Šต๋‹ˆ๋‹ค.


์ž…์ถœ๋ ฅ ์˜ˆ

 

 

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

 

 

๋‚˜์˜ ์†”๋ฃจ์…˜

 

์ „ํ˜•์ ์ธ Greedy ๋ฌธ์ œ์ด๋‹ค. ํ•ต์‹ฌ์€ ํ•œ ๋ฒˆ์— ์ตœ๋Œ€ 2๋ช…์”ฉ๋ฐ–์— ํƒˆ ์ˆ˜ ์—†๋‹ค๋Š” ๊ฒƒ์— ์žˆ๋‹ค. ์ธ์›์ˆ˜ ์ œํ•œ์ด ์—†์—ˆ๋‹ค๋ฉด ๋ฌด๊ฒŒ๋งŒ์œผ๋กœ ์ธก์ •ํ•˜์—ฌ ๋” ๊นŒ๋‹ค๋กœ์šด ๋ฌธ์ œ๊ฐ€ ๋˜์—ˆ์„ ์ˆ˜ ์žˆ์œผ๋‚˜, ์ธ์› ์ œํ•œ์ด ์žˆ์œผ๋ฏ€๋กœ ๊ฐ€์žฅ ๋ฌด๊ฒ๊ณ  ๊ฐ€์žฅ ๊ฐ€๋ฒผ์šด ์‚ฌ๋žŒ์˜ ๋ฌด๊ฒŒ ํ•ฉ์„ ๊ณ„์† ๊ตฌํ•˜๋ฉฐ count ๋ฅผ ๋†’์—ฌ๊ฐ€๋Š” ๋ฐฉ๋ฒ•์„ ์“ธ ์ˆ˜ ์žˆ์—ˆ๋‹ค. 

 

def solution(people, limit):
    people.sort()
    left = 0
    right = len(people) - 1
    count = 0
    while left <= right:
        if people[left] + people[right] <= limit:
            left += 1
            right -= 1
        else:
            right -= 1
        count += 1
    return count

 

๋Œ“๊ธ€