BOJ/๐Ÿฅˆ

โ˜…Greedy Intermediate II - 4 Solvedโ˜…

metamong 2023. 8. 20.

โ˜… 2012 ๋“ฑ์ˆ˜ ๋งค๊ธฐ๊ธฐ โ˜…

 

import sys
input=sys.stdin.readline
N=int(input())
ans,i=0,1
for x in sorted([int(input()) for _ in range(N)]):
    ans+=abs(x-i)
    i+=1
print(ans)

 

๐Ÿ’ฒ greedy ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์ง๊ด€์ ์œผ๋กœ optimal solution์˜ ๋ชจ์Œ → ์ „์ฒด ์ตœ์  solution์ด๋ผ ์ƒ๊ฐํ•˜๊ณ  ์ง„ํ–‰ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค.

 

๐Ÿ’ฒ greedy ๊ด€์  ๋ถ„์„

: ๊ฐœ๋ณ„ ์ƒํ™ฉ) ๊ฐ์ž ์˜ˆ์ƒํ•œ ๋“ฑ์ˆ˜์— ์‹ค์ œ ๋“ฑ์ˆ˜ ๋ถ€์—ฌ, ๊ทธ๋ฆฌ๊ณ  ๋ถˆ๋งŒ๋„ ๊ตฌํ•˜๊ธฐ

: ์ข…ํ•ฉ ์ƒํ™ฉ) ๋ถˆ๋งŒ๋„์˜ ํ•ฉ / ์ตœ์ ์˜ ์ข…ํ•ฉ ์ƒํ™ฉ) ๋ถˆ๋งŒ๋„์˜ ํ•ฉ์ด ์ตœ์†Œ

 

โ˜… ์ตœ์ ์˜ ์ข…ํ•ฉ ์ƒํ™ฉ์€ ์ตœ์ ์˜ ๊ฐœ๋ณ„ ์ƒํ™ฉ์˜ ๋ชจ์Œ์œผ๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๊ณ , ๊ฐœ๋ณ„ ์ƒํ™ฉ์˜ ์ตœ์  greedy ์†”๋ฃจ์…˜์€ ๋จผ์ € ์˜ˆ์ƒํ•œ ๋“ฑ์ˆ˜๋ฅผ ascending order ์ •๋ ฌ / ์‹ค์ œ ๋“ฑ์ˆ˜๋ฅผ 1๋ถ€ํ„ฐ ascending order์— ๋งž๊ฒŒ ๋ถ€์—ฌํ•˜๋ฉด ๋ถˆ๋งŒ๋„์˜ ํ•ฉ์ด ์ตœ์†Œ


โ˜… 1049 ๊ธฐํƒ€์ค„ โ˜…

 

import sys
input=sys.stdin.readline
N,M=map(int,input().split())
six,one=map(min, zip(*(map(int, input().split()) for _ in range(M))))
ans=0
if six > one*6: print(N*one)
else:
    ans+=(N//6)*six
    if (N%6)*one > six: ans+=six
    else: ans+=(N%6)*one
    print(ans)

 

๐Ÿ’ฒ greedy ๊ด€์  ๋ถ„์„

: ๊ฐœ๋ณ„ ์ƒํ™ฉ) ํŒจํ‚ค์ง€๋กœ ์‚ด ์ง€, ๋‚ฑ๊ฐœ๋กœ ์‚ด ์ง€ ๊ฒฐ์ •

: ์ข…ํ•ฉ ์ƒํ™ฉ) ๊ฒฐ์ • ๊ฒฐ๊ณผ์˜ ํ•ฉ๊ณ„ / ์ตœ์ ์˜ ์ข…ํ•ฉ ์ƒํ™ฉ) ํ•ฉ๊ณ„ ๊ฐ€๊ฒฉ์ด ์ตœ์†Œ

 

โ˜… ์ตœ์ ์˜ ์ข…ํ•ฉ ์ƒํ™ฉ์€ ์ตœ์ ์˜ ๊ฐœ๋ณ„ ์ƒํ™ฉ์˜ ๋ชจ์Œ์œผ๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๊ณ , ๊ฐœ๋ณ„ ์ƒํ™ฉ์˜ ์ตœ์  greedy ์†”๋ฃจ์…˜์€ (1) ๋‚ฑ๊ฐœ๋ฅผ 6๊ฐœ ๋ชจ์€ ๊ฒƒ๋ณด๋‹ค ํŒจํ‚ค์ง€๊ฐ€ ๋” ๋น„์‹ธ๋‹ค๋ฉด, ๋‚ฑ๊ฐœ๋กœ๋งŒ ๋ฌด์กฐ๊ฑด ๊ตฌ๋งค / (2) ํŒจํ‚ค์ง€๊ฐ€ ๋” ์‹ธ๋‹ค๋ฉด ์ผ๋‹จ ํŒจํ‚ค์ง€๋กœ 6์œผ๋กœ ๋‚˜๋ˆˆ ๋ชซ๋งŒํผ ์‚ฌ๊ณ , ํŒจํ‚ค์ง€๋กœ ์‚ด ์ˆ˜ ์—†๋Š” ๋‚ฑ๊ฐœ์ธ ๊ฒฝ์šฐ ํŒจํ‚ค์ง€ 1๊ฐœ๋กœ ์‚ฌ๋Š” ๊ฒŒ ์ด๋“์ผ์ง€, ๋‚ฑ๊ฐœ๋กœ ์‚ฌ๋Š” ๊ฒŒ ์ด๋“์ผ์ง€ ๊ฒฐ์ • (์œ„ (1)๊ณผ (2) ๊ตฌ๋ณ„์— greedy ์›๋ฆฌ)


โ˜… 2847 ๊ฒŒ์ž„์„ ๋งŒ๋“  ๋™์ค€์ด โ˜…

 

import sys
input=sys.stdin.readline

N=int(input())
levels=[int(input()) for _ in range(N)]
cnt,cur=0,levels[-1]-1
for level in levels[::-1][1:]:
    if level < cur:
        cur = level-1
    else:
        cnt+=(level-cur)
        cur=cur-1
print(cnt)

 

๐Ÿ’ฒ greedy ๊ด€์  ๋ถ„์„

: ๊ฐœ๋ณ„ ์ƒํ™ฉ) ๊ฐ ์ˆซ์ž๋ณ„๋กœ ์–ผ๋งˆ๋งŒํผ ๊ฐ์†Œ์‹œํ‚ฌ์ง€ ๊ฒฐ์ •

: ์ข…ํ•ฉ ์ƒํ™ฉ) ์ด ๊ฐ์†Œ ์นด์šดํŠธ ํ•ฉ๊ณ„ / ์ตœ์ ์˜ ์ข…ํ•ฉ ์ƒํ™ฉ) ๊ฐ์†Œ ์นด์šดํŠธ ํ•ฉ๊ณ„ ์ตœ์†Ÿ๊ฐ’

 

โ˜… ์ตœ์ ์˜ ์ข…ํ•ฉ ์ƒํ™ฉ์€ ์ตœ์ ์˜ ๊ฐœ๋ณ„ ์ƒํ™ฉ์˜ ๋ชจ์Œ์œผ๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๊ณ , ๊ฐœ๋ณ„ ์ƒํ™ฉ์˜ ์ตœ์  greedy ์†”๋ฃจ์…˜์€ ๊ฑฐ๊พธ๋กœ ์˜ค๋ฅธ์ชฝ๋ถ€ํ„ฐ ๋งจ ์˜ค๋ฅธ์ชฝ ์ˆซ์ž๋Š” ๋†”๋‘” ์ฑ„๋กœ ๊ทธ ์•ž๋ถ€ํ„ฐ 1์”ฉ๋งŒ ๊ฐ์†Œํ•œ ์ˆซ์ž๋กœ๋งŒ ๊ตฌ์„ฑ๋˜๊ฒŒ๋”, ๋งŒ์•ฝ 1๋ณด๋‹ค ๊ฐ์†Œํ•œ ์ˆซ์ž๋ณด๋‹ค๋„ ๋” ์ž‘๋‹ค๋ฉด ๊ทธ ์ˆซ์ž๋ฅผ ๊ธฐ์ค€์œผ๋กœ 1์”ฉ ๊ฐ์†Œํ•˜๋ฉฐ ์™ผ์ชฝ์œผ๋กœ ๊ณ„์† ์ง„ํ–‰(์˜ค๋ฅธ์ชฝ๋ถ€ํ„ฐ ๊ฑฐ๊พธ๋กœ ์ง„ํ–‰ํ•˜๋ฉด์„œ if๋ฌธ์œผ๋กœ ํ˜„์žฌ cur๊ณผ level ๋น„๊ต: cur์€ ๊ทธ ๋‹ค์Œ ๋Œ€์ƒ ์ˆซ์ž)


โ˜… 23895 Allocation โ˜…

 

import sys
input=sys.stdin.readline

T=int(input())
for i in range(1,T+1):
    N,B=map(int,input().split())
    A=list(map(int,input().split()))
    A.sort()
    ans=0
    for a in A:
        if a<=B:
            B-=a
            ans+=1
            if B<=0:
                break
    print(f'Case #{i}: {ans}')

 

๐Ÿ’ฒ๋งŽ์€ ๊ฐœ์ˆ˜์˜ ์ง‘์„ ์‚ฌ๋ ค๋ฉด ์ผ๋‹จ ์‹ผ ์ง‘๋ถ€ํ„ฐ ๋จผ์ € get


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

๋Œ“๊ธ€