BOJ/๐Ÿฅˆ

โ˜…Greedy Intermediate II - 11 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


โ˜… 1439 ๋’ค์ง‘๊ธฐ โ˜…

import math
S,x=input(),0
for i in range(1,len(S)):
    if S[i]!=S[i-1]:x+=1
print(math.ceil(x/2))

 

๐Ÿ’ฒ1๊ณผ 0 ์ด๋ ‡๊ฒŒ ๋‹ค๋ฅธ ๋ถ€๋ถ„์˜ ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•˜๊ณ  math.ceil(๋‹ค๋ฅธ ๋ถ€๋ถ„์˜ ๊ฐœ์ˆ˜/2)๋ฅผ ๊ตฌํ•˜๋ฉด ๋. ์˜ˆ๋ฅผ ๋“ค์–ด 101์ด ์žˆ์„ ๋•Œ ๋ฐ”๋€ ๋ถ€๋ถ„์€ 2๊ฐœ ์ด๋ฏ€๋กœ ์ ˆ๋ฐ˜ ํšŸ์ˆ˜๋งŒํผ ๋ฐ”๊พธ์–ด ์ฃผ์–ด์•ผ ์›ํ•˜๋Š” ๋Œ€๋กœ ๋ฐ”๋€œ. ๋”ฐ๋ผ์„œ ์ ˆ๋ฐ˜์œผ๋กœ ๋‚˜๋ˆ„์–ด์•ผ ํ•œ๋‹ค.


โ˜… 30457 ๋‹จ์ฒด ์ค„๋„˜๊ธฐ โ˜…

import sys
input=sys.stdin.readline

N=int(input())
A=list(map(int,input().split()))
A.sort()
B=[]
a,b=1,0
for x in range(1,len(A)):
    if A[x]>A[x-1]: a+=1
    else:
        B.append(A[x])
if len(B)!=0:
    b=1
    for x in range(1,len(B)):
        if B[x]>B[x-1]: b+=1      
print(a+b)

 

๐Ÿ’ฒ์–‘ ๋ฐฉํ–ฅ์„ ๋ฐ”๋ผ๋ณผ๋•Œ ํ‚ค๊ฐ€ ์ž‘์€ ์‚ฌ๋žŒ ์ชฝ๋งŒ ๋ฐ”๋ผ๋ณผ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๊ฐ™์€ ํ‚ค๋ฅผ ๊ฐ€์ง„ ์‚ฌ๋žŒ์€ ์–‘ ์ชฝ ์ตœ๋Œ€ 2์ž๋ฆฌ๋งŒ ๋†“์„ ์ˆ˜ ์žˆ๋‹ค๋Š” ์‚ฌ์‹ค๋งŒ ์•Œ๋ฉด ๋œ๋‹ค! ๋จผ์ € ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ญ‰ ์ •๋ ฌ. ๊ฐ™์€ ํ‚ค๋ฅผ ๊ฐ€์ง„ ๋‚˜๋จธ์ง€ ์‚ฌ๋žŒ๋“ค์„ ์˜ค๋ฅธ์ชฝ ๋๋ถ€ํ„ฐ ๋ฐฐ์น˜ํ•˜๋˜ ์—ฌ๊ธฐ์„œ๋„ ๋™์ผํ•œ ํ‚ค๊ฐ€ ์žˆ์œผ๋ฉด ์ œ์™ธ.


โ˜… 30873 Hanyang Popularity Exceeding Competition โ˜…

import sys
input=sys.stdin.readline

N=int(input())
popularity=0
for _ in range(N):
    P,C=map(int,input().split())
    if abs(P-popularity)<=C:
        popularity+=1

print(popularity)

 

๐Ÿ’ฒ๋‹จ์ˆœํ•˜๊ฒŒ ์ง์ ‘ ์ตœ๋Œ€ํ•œ ๋งŽ์ด ๋งŒ๋‚˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋ฏ€๋กœ, ๋งŒ๋‚  ๋•Œ๋งˆ๋‹ค (์ˆœ์„œ๋Š” ์ฐจ๋ก€๋Œ€๋กœ ์ด๋ฏธ ์ •ํ•ด์ ธ ์žˆ์Œ) abs(P-popularity)<=C ์‹ ๋งž๋Š” ์ง€ ์ ๊ฒ€. ๋งŒ๋‚˜๋Š” ์‚ฌ๋žŒ๋งˆ๋‹ค์˜ ๊ฐ€์ค‘์น˜๋Š” ๋ชจ๋‘ ๋™์ผํ•˜๋ฏ€๋กœ ๋‹จ์ˆœํ•˜๊ฒŒ popularity += 1์”ฉ ์ฆ๊ฐ€ํ•˜๋ฉด์„œ ์ตœ์ข… popularity ์ถœ๋ ฅ


โ˜… 14655 ์šฑ์ œ๋Š” ๋„๋ฐ•์Ÿ์ด์•ผ!! โ˜…

import sys
input=sys.stdin.readline

N=int(input())
round1=list(map(int,input().split()))
r1=[-x if x < 0 else x for x in round1]
round2=list(map(int,input().split()))
r2=[-x if x > 0 else x for x in round2]
print(sum(r1)-sum(r2))

 

๐Ÿ’ฒ ์ฒซ๋ฒˆ์งธ ๋ผ์šด๋“œ์—์„œ ์ตœ๋Œ“๊ฐ’์„ ๊ฐ€์งˆ๋ ค๋ฉด ๋ชจ๋“  ๊ฐ’์€ ์ตœ๋Œ€ํ•œ ์Œ์ˆ˜๊ฐ€ ์•„๋‹Œ ์–‘์ˆ˜์ชฝ / ๋‘๋ฒˆ์งธ ๋ผ์šด๋“œ๋Š” ๊ทธ ๋ฐ˜๋Œ€

๐Ÿ’ฒ ์ œ์ผ ๋์— 1๊ฐœ ๋˜๋Š” 2๊ฐœ๋งŒ ๋’ค์ง‘์–ด๋„ ๋˜๋ฏ€๋กœ, ๊ณง ๋ชจ๋“  ๋™์ „์„ ์›ํ•˜๋Š” ๋Œ€๋กœ ์–‘์ˆ˜์ชฝ์ด๋‚˜ ์Œ์ˆ˜์ชฝ์œผ๋กœ ๋’ค์ง‘์„ ์ˆ˜ ์žˆ๋‹ค๋Š” ๋œป. ๋”ฐ๋ผ์„œ ๋ชจ๋‘ ์–‘์ˆ˜ - ๋ชจ๋‘ ์Œ์ˆ˜์ผ๋•Œ ๋ฐ”๋กœ ์—ฐ์‚ฐํ•ด์ฃผ๋ฉด ๋œ๋‹ค.


โ˜… 20937 ๋–ก๊ตญ โ˜…

import sys
input=sys.stdin.readline
from collections import Counter

N=int(input())
cs=list(map(int,input().split()))
cs=sorted(cs,reverse=True)
ans=0
x=Counter(cs)
x_freq=x.values()
print(max(x_freq))

 

๐Ÿ’ฒ ๋–ก๊ตญ ๊ทธ๋ฆ‡ ํƒ‘์€ ๋‚ด๋ฆผ์ฐจ์ˆœ ์ˆ˜์—ด ๊ทธ ์ž์ฒด๋ฅผ ๋œปํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด [5, 4, 3, 2, 2, 1, 1]์ด ์žˆ๋‹ค๋ฉด, ํƒ‘์˜ ๊ฐœ์ˆ˜๋ฅผ ์ตœ์†Œํ™”ํ• ๋ ค๋ฉด [5, 4, 3, 2, 1] [2, 1] ์ด๋ ‡๊ฒŒ 2๊ฐœ๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค. ์ฆ‰ ํ•œ ๊ฐœ์˜ ํƒ‘ ๋‚ด์— ๋‚ด๋ฆผ์ฐจ์ˆœ ์ˆซ์ž ๊ฐœ์ˆ˜๋ฅผ ๋งŽ์ด ๋„ฃ์œผ๋ฉด ๋œ๋‹ค. ์ฆ‰, ํƒ‘์˜ ๊ฐœ์ˆ˜๋Š” Counter() ํ™œ์šฉํ•˜์—ฌ ์ตœ๋นˆ๊ฐ’์˜ ์ตœ๋Œ“๊ฐ’์„ ๊ตฌํ•˜๋ฉด ๋œ๋‹ค.


โ˜… 31066 ๋น„ ์˜ค๋Š” ๋‚  โ˜…

import sys
input=sys.stdin.readline

for _ in range(int(input())):
    N,M,K=map(int,input().split())
    if N!=1 and (M,K)==(1,1):
        print(-1)
        continue
    status=[N,M,0,0]
    ans=0

    while status[1]!=0:
        #1st go
        ans+=1
        if (status[0]-status[1]*K)<=0:
            print(ans)
            break
        else:
            status=[status[0]-status[1]*K,0,status[1]*K,status[1]]

        #2nd come back again
        ans+=1
        status[2] -= 1
        status[0] += 1
        status[1] += status[3]
        status[3] = 0

 

๐Ÿ’ฒ๋ชจ๋“  ํ•™์ƒ์ด ๊ฑด๋„ˆ๊ฐ€๊ธฐ ์œ„ํ•œ ์‹œํ–‰ ์ตœ์†Œ ํšŸ์ˆ˜. ์šฐ์‚ฐ ๊ฐœ์ˆ˜ * ๋“ค๊ณ  ๊ฐˆ ์ˆ˜ ์žˆ๋Š” ์‚ฌ๋žŒ์˜ ์ˆ˜๋งŒํผ ๋ชจ๋‘ ๊ฐ€๊ณ , ๋ชจ๋‘ ๊ฐ€์ ธ๊ฐ€์ง€ ๋ชปํ•˜๋ฉด ํ•œ ๋ช… ๋ชจ๋‘ ์šฐ์‚ฐ ๋“ค๊ณ ์˜ค๊ฒŒ๋” ์ง์ ‘ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ๋Œ๋ฆฌ๋ฉด ๋œ๋‹ค.


โ˜… 30796 gahui and sousenkyo 4 โ˜…

import sys
input=sys.stdin.readline
v,k=map(int,input().split())
cnt=0
start=v
l1,ans=[],[]
while start>0:
    if (start-k)<=0:
        ans+=[x for x in range(start,0,-1)]
    else:
        ans+=[x for x in range(start,start-k,-1)]
    start=(start-k-k)
ans.sort(reverse=True)
print(len(ans))
print(*ans,sep='\n')

 

๐Ÿ’ฒ๊ทธ๋ฆฌ๋”” ๊ด€์ ์œผ๋กœ start๋ถ€ํ„ฐ ์—…๋ฐ์ดํŠธ๋ฅผ ํ•ด๋‚˜๊ฐ€๋ฉฐ ์„ ๊ฑฐ์— ์ถœ๋งˆํ•˜๋Š” ์บ๋ฆญํ„ฐ ๊ฐœ์ˆ˜ ์ถœ๋ ฅ


 

 

 

 

 

 

 

 

 

๋Œ“๊ธ€