โ 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
'BOJ > ๐ฅ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
โ Tree Upper-Intermediate I - 3 Solvedโ (0) | 2023.12.19 |
---|---|
โ BF Upper-Intermediate I - 2 Solvedโ (0) | 2023.10.26 |
โ Combinatorics Upper-Intermediate I - 4 Solvedโ (0) | 2023.08.16 |
โ Regular Expression ์ค์๊ธ - 2๋ฌธ์ ()โ (0) | 2023.08.14 |
โ Set/Map Upper-Intermediate I - 2 Solvedโ (0) | 2023.08.11 |
๋๊ธ