๐งโ๏ธ greedy ์ค๊ธ๋ฌธ์ ๋ ์ ํ์ ์ธ greedy ๋ํ ์์ ๋ชจ์์ด๋ผ๊ณ ์๊ฐํ๋ฉด ์ฝ๋ค! greedy ์ ํ์ ์ฃผ์ด์ง ์ํฉ์์ ๋ค์ํ ์ ํ์ง๊ฐ ์์ ๋ ๋น์ฅ์ ์ต์ ์ ์ ํ์ง๋ฅผ ๊ตฌํ ๊ฒฐ๊ณผ๋ฅผ ์ฐ์ํ ๋ ๊ทธ ๊ฒฐ๊ณผ๊ฐ ๊ณง ์ต์ ์ ๊ฒฐ๊ณผ๊ฐ ๋๋ค๋ ๋ด์ฉ์ด๋ค. ์ด ๋ ์ค์ํ ๊ฑด, ๋์ฌ ์ ์๋ ๋ชจ๋ ์ํฉ์ ์ ํด ๋๊ณ , ๊ทธ ์ํฉ์์ ์ต์ ์ ์ํฉ์ ์ฐ์ํด์ ๊ตฌํ ์ํฉ์ ๊ฒฐ๊ณผ ๋ชจ์์ด ๊ณง ์ ์ฒด์ ์ต์ ์ํฉ์ด์ด์ผ ํ๋ค๋ ์ ์ ๊ฐ ๊น๋ ค ์๋ค.
โ 6752 Time on task โ
T = int(input())
C = int(input())
times = [int(input()) for _ in range(C)]
n = 0
times.sort()
for time in times:
T -= time
if T < 0:
break
n += 1
print(n)
๐งโ๏ธ greedy ๊ด์ ๋ถ์
: ๊ฐ๋ณ ์ํฉ) chore๋ฅผ ์ ํํด ํ ๊ฐ์ chore๋ฅผ ์ฒ์๋ถํฐ ๋๊น์ง ๋๋ด๋ ์ํฉ
: ์ข ํฉ ์ํฉ) ์ ํํ chore๋ฅผ ๋ชจ๋ ๋๋ด๊ธฐ / ์ต์ ์ ์ข ํฉ ์ํฉ) ์ต๋ ๊ฐ์์ chore๋ฅผ ๋ชจ๋ ๋๋ด๊ธฐ
โ ์ต์ ์ ์ข ํฉ ์ํฉ์ ์ต์ ์ ๊ฐ๋ณ ์ํฉ์ ๋ชจ์์ผ๋ก ๋ง๋ค ์ ์๊ณ , ๊ฐ๋ณ ์ํฉ์ ์ต์ greedy ์๋ฃจ์ ์ ๊ฐ์ฅ ์๊ฐ์ด ์ ๊ฒ ๊ฑธ๋ฆฌ๋ chore๋ถํฐ ๊ณจ๋ผ์ ์งํ(์๊ฐ์ด ์ด๊ณผ๋๋ฉด break)
โ 16435 ์ค๋ค์ดํฌ๋ฒ๋ โ
N,L = map(int, input().split())
h = list(map(int, input().split()))
h.sort()
for each_h in h:
if each_h > L:
break
L += 1
print(L)
๐งโ๏ธ greedy ๊ด์ ๋ถ์
: ๊ฐ๋ณ ์ํฉ) snake ๊ธธ์ด๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ๊ณผ์ผ์ด ์์ผ๋ฉด ๋จน๊ณ snake ๊ธธ์ด๊ฐ ๋์ด๋๋ ์ํฉ
: ์ข ํฉ ์ํฉ) ๋จน์ ์ ์๋ ๊ณผ์ผ์ ๋ชจ๋ ๋จน์ / ์ต์ ์ ์ข ํฉ ์ํฉ) ๋จน์ผ๋ฉด์ ๋์ด๋ ์ ์๋ snake์ ์ต๋ ๊ธธ์ด
โ ์ต์ ์ ์ข ํฉ ์ํฉ์ ์ต์ ์ ๊ฐ๋ณ ์ํฉ์ ๋ชจ์์ผ๋ก ๋ง๋ค ์ ์๊ณ , ๊ฐ๋ณ ์ํฉ์ ์ต์ greedy ์๋ฃจ์ ์ ๊ณผ์ผ ๋์ด๋ฅผ ์ ๋ ฌํ ๋ค์, ์์ ๋์ด๋ถํฐ ์ฐจ๋ก๋๋ก ๋จน์ผ๋ฉด์ 1์ฉ ์ฆ๊ฐํ๋ฉด์ ์ต๋ํ ๊ธธ์ด ๋๋ฆฌ๊ธฐ (๋ชป ๋จน๋ ๊ณผ์ผ์ด ๊ทธ ๋ค์ ์์ผ๋ฉด break)
โ 1026 ๋ณด๋ฌผ โ
input()
print(sum([x*y for x,y in zip(sorted(map(int,input().split()),reverse=True),sorted(map(int,input().split())))]))
๐งโ๏ธ greedy ๊ด์ ๋ถ์
: ๊ฐ๋ณ ์ํฉ) A[i] * B[i]
: ์ข ํฉ ์ํฉ) ๊ฐ A[i]*B[i]์ ๋ชจ๋ ํฉ์ธ S ๊ตฌํ๊ธฐ / ์ต์ ์ ์ข ํฉ ์ํฉ) S ์ต์๊ฐ ๊ตฌํ๊ธฐ
โ ์ต์ ์ ์ข ํฉ ์ํฉ์ ์ต์ ์ ๊ฐ๋ณ ์ํฉ์ ๋ชจ์์ผ๋ก ๋ง๋ค ์ ์๊ณ , ๊ฐ๋ณ ์ํฉ์ ์ต์ greedy ์๋ฃจ์ ์ ๋จผ์ A๋ฅผ ์ฆ๊ฐ / B๋ฅผ ๊ฐ์ ์์ผ๋ก ์ ๋ ฌํ ๋ค, A์ ์ต๋๊ฐ x B์ ์ต์๊ฐ + A์ ๋๋ฒ์งธ ํฐ ๊ฐ x B์ ๊ทธ ๋ค์ ์ต์๊ฐ... ์์๋ก ๋ํ๊ธฐ
: ๋ณด์ถฉ์ค๋ช ) B๊ฐ ๊ณ ์ ๋์ด ์๋ ์ํ์์ B์ ์ต๋๊ฐ๋ถํฐ ๋ณด์๋ฉด, S๋ฅผ ์ต์๊ฐ์ผ๋ก ๋ง๋ค๋ ค๋ฉด greedyํ๊ฒ ์ผ๋จ A์ ์ต์๊ฐ์ผ๋ก ๊ณฑํด์ฃผ์ด์ผ ํ๋ค. ๊ฐ์ฅ ํฐ ์๊ฐ ๊ณฑํด์ง๋ ์๋ ์ต์๊ฐ์ด์ด์ผ S๊ฐ ์ต์. (์ด์ฐจํผ ๋ชจ๋ A์ B ๋ชจ๋๊ฐ ์ ํํด์ ๊ณฑํด์ง๋ ์ํฉ์์)
+) zip ํ์ฉ
โ 1789 ์๋ค์ ํฉ โ
print(int(((8*int(input())+1)**(1/2)-1)/2))
๐งโ๏ธ greedy ๊ด์ ๋ถ์
: ๊ฐ๋ณ ์ํฉ) ์์ ์ฌ์ฉํ์ง ์์ ์์ฐ์๋ฅผ 1๊ฐ ์ ํด ๋ํ๊ธฐ
: ์ข ํฉ ์ํฉ) ์๋ก ๋ค๋ฅธ ์์ฐ์๋ฅผ ๋ชจ๋ ๋ํด S๋ก ๋ง๋ค๊ธฐ / ์ต์ ์ ์ข ํฉ ์ํฉ) ์๋ก ๋ค๋ฅธ ์์ฐ์์ ๊ฐ์ N๊ฐ์ ์ต๋๊ฐ ๊ตฌํ๊ธฐ
โ ์ต์ ์ ์ข ํฉ ์ํฉ์ ์ต์ ์ ๊ฐ๋ณ ์ํฉ์ ๋ชจ์์ผ๋ก ๋ง๋ค ์ ์๊ณ , ๊ฐ๋ณ ์ํฉ์ ์ต์ greedy ์๋ฃจ์ ์ ๋ํด์ง๋ ์์ฐ์์ ๊ฐ์๊ฐ ์ต๋์ด๋ ค๋ฉด ์ต๋ํ ์์ ์์ฐ์์ธ 1๋ถํฐ 2, 3, 4 ์์ผ๋ก ์ต๋ํ ๋ํด ๊ฐ์๋ฅผ ์ต๋ํํ๋ค. ๊ทธ ๋ค์ ๋จ์ ์์ฐ์๊ฐ ์๋ค๋ฉด ๊ธฐ์กด์ ๋ํ ์์ฐ์์ ๋ํด์ ์ ์ผ ํฐ ๋ ๋ค๋ฅธ ์์ฐ์ 1๊ฐ๋ก ํฉ์น๋ฉด ์๋ก ๋ค๋ฅธ ์์ฐ์ ๊ฐ์ ์ต๋๊ฐ์ ๊ตฌํ ์ ์๋ค. (1๋ถํฐ ์๋ํ๊ณ ์๋ฅผ ๋ค์ด 10์ ๋ํ๋ค๋ฉด 10์ 1์ด ๋ค์ด๊ฐ๋ฏ๋ก greedy ์ฑ๋ฆฝ)
: ๋ณด์ถฉ์ค๋ช ) ์๋ฅผ ๋ค์ด S๊ฐ 198์ด๋ผ๋ฉด 1๋ถํฐ 19๊น์ง ์ญ ๋ํ ๊ฒฐ๊ณผ๋ 190์ด๊ณ 8์ด ๋จ๋๋ค. ๋จ๋ 8์ ๋ํ ์์ฐ์ ์ต๋๊ฐ 19์ ํฉ์ณ 27์ ๋ง๋ค๋ฉด ๋จ. ์ฆ ์ต๋ ๊ฐ์๋ 19. ๋ฐ๋ผ์ 1๋ถํฐ x๊น์ง ๋ํ ๊ฒฐ๊ณผ๊ฐ S๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ๋ค๋ฉด, x์ ์ต๋๊ฐ์ด ์ ๋ต. (์๋ ์ ํ์ธ)
๐งโ๏ธ
$ \frac{n(n+1)}{2} \leq S < \frac{(n+1)(n+2)}{2}$
: ์ ์์ ๋ง์กฑํ๋ n ๊ตฌํ๊ธฐ. n์ ๋ํด ๋ถ๋ฑ์ ํ์ด์ int() ํจ์ ๊ฒฐ๊ณผ๋ก ๊ตฌํ๋ฉด ๋
: ๋ถ๋ฑ์์ ํ๋ฉด ์๋์ ๊ฐ๋ค.
$n\leq \frac{\sqrt{8S+1}-1}{2}$
โ 1758 ์๋ฐ์ ๊ฐํธ โ
import sys
def input(): return sys.stdin.readline().rstrip()
total = int(input())
max_tip = 0
think = [int(input()) for _ in range(total)]
think.sort(reverse=True)
for i in range(total):
tip = think[i] - (i+1) + 1
if tip > 0:
max_tip += tip
else:
break
print(max_tip)
๐งโ๏ธ greedy ๊ด์ ๋ถ์
: ๊ฐ๋ณ ์ํฉ) ์ ํด์ง ์ฌ๋๋ณ๋ก ๋ฑ์๋ฅผ ์ ์ ํ ์ ํ๊ธฐ
: ์ข ํฉ ์ํฉ) ์ฌ๋๋ณ ์ ํด์ง ๋ฑ์์ ๋ง๊ฒ tip ๋ถ์ฌํด์ ์ต์ข tip ํฉ๊ณ ๊ตฌํ๊ธฐ / ์ต์ ์ ์ข ํฉ ์ํฉ) ์ต๋๊ฐ tip ๊ตฌํ๊ธฐ
โ ์ต์ ์ ์ข ํฉ ์ํฉ์ ์ต์ ์ ๊ฐ๋ณ ์ํฉ์ ๋ชจ์์ผ๋ก ๋ง๋ค ์ ์๊ณ , ๊ฐ๋ณ ์ํฉ์ ์ต์ greedy ์๋ฃจ์ ์ ๊ฐ ์ฌ๋๋ณ๋ก [์๊ฐํ tip - ๋ฑ์ + 1]์ ํฉ์ด ์ต๋๊ฐ์ด ๋์ด์ผ ํ๋ค. ์ฌ๊ธฐ์ ์๊ฐํ tip๊ณผ 1์ ์ ํด์ ธ ์์ผ๋ฏ๋ก ์๊ฐํ tip์ด ๋ง์ ์ฌ๋์ผ์๋ก ๋ฑ์๋ฅผ ์ต์ํํด์ผ ํ๋ค.
โ 11047 ๋์ 0 โ
import sys
input=sys.stdin.readline
N,K=map(int, input().split())
a=0
l=[i for i in [int(input()) for _ in range(N)]if i<=K]
for A in l[::-1]:
a+=(K//A)
K%=A
if K==0:break
print(a)
๐งโ๏ธ greedy ๊ด์ ๋ถ์
: ๊ฐ๋ณ ์ํฉ) ๋์ ์ ์ข ๋ฅ๋ฅผ ์ ํ๊ธฐ
: ์ข ํฉ ์ํฉ) K์์ ๋ง๋ค๊ธฐ / ์ต์ ์ ์ข ํฉ ์ํฉ) K์์ ๋ง๋ค๊ธฐ ์ํ ๋์ ์ ๊ฐ์ ์ต์ํ
โ ์ต์ ์ ์ข ํฉ ์ํฉ์ ์ต์ ์ ๊ฐ๋ณ ์ํฉ์ ๋ชจ์์ผ๋ก ๋ง๋ค ์ ์๊ณ , ๊ฐ๋ณ ์ํฉ์ ์ต์ greedy ์๋ฃจ์ ์ ๋์ ์ ์ข ๋ฅ ๊ฐ์น๊ฐ ๋์ ๊ฒ๋ถํฐ ๋จผ์ ์นด์ดํธ (์ด ๋ ๋ชจ๋ ๋์ ์ ์ข ๋ฅ ๊ฐ์น: ํฐ ๊ฐ์น๊ฐ ์์ ๊ฐ์น์ ๋ฐฐ์์ด๋ฏ๋ก ๋น์ฅ ํฐ ์ข ๋ฅ๋ฅผ ์ ํํ ์ํฉ์ด greedy๋ก ์ฑ๋ฆฝ)
โ 15761 Lemonade Line โ
N = int(input())
ws = list(map(int, input().split()))
ws.sort(reverse=True)
front_num = 0
print(ws)
for i in range(N):
if ws[i] >= front_num:
front_num += 1
print(front_num)
#-----------------------------
N = int(input())
ws = list(map(int, input().split()))
ws.sort(reverse=True)
front_num = 0
for i in range(N):
if ws[i]<front_num:
break
front_num += 1
print(front_num)
๐งโ๏ธ greedy ๊ด์ ๋ถ์
: ๊ฐ๋ณ ์ํฉ) cow wi๊ฐ ๊ฐ ์ง ๋ง ์ง ๊ฒฐ์
: ์ข ํฉ ์ํฉ) line์ ์๋ cow๋ค / ์ต์ ์ ์ข ํฉ ์ํฉ) line์ ์ cow์ ์ต์ ๊ฐ์
โ ์ต์ ์ ์ข ํฉ ์ํฉ์ ์ต์ ์ ๊ฐ๋ณ ์ํฉ์ ๋ชจ์์ผ๋ก ๋ง๋ค ์ ์๊ณ , ๊ฐ๋ณ ์ํฉ์ ์ต์ greedy ์๋ฃจ์ ์ wi๊ฐ ๋์ cow๋ถํฐ ๋จผ์ line up
: ๋ณด์ถฉ์ค๋ช ) ๋ฅ๋ ฅ์ด ํฐ ์์๊ฐ ๋จผ์ ์ค๊ฒ๋ ํด์, ๋ฅ๋ ฅ์ด ์์ ์๊ฐ ํฐ ์์ ๋นํด ๋จผ์ ๋ ๋ ํ๋ฅ ์ด ๋๊ธฐ ๋๋ฌธ (๋ฅ๋ ฅ์ด ์์ ์์ผ์๋ก ์์ ์ ์์ ๊ฐ์๊ฐ ์ ํด์ ธ ์๋ค๋ฉด ๋ ๋ ํ๋ฅ ์ด ๋ฌด์กฐ๊ฑด ๋๊ธฐ ๋๋ฌธ์)
+ ํ ๋ฒ ์๊ฐ ๋ ๋๋ค๋ฉด ๊ทธ ๋ค์ ์๋ wi๊ฐ ์์์ง๋ฏ๋ก ๋ฌด์กฐ๊ฑด ์์ ์ ์์ ๊ฐ์๋ณด๋ค ์๊ธฐ ๋๋ฌธ์ ๋ ๋จ → break ์ค์
โ 2839 ์คํ ๋ฐฐ๋ฌ โ
N=int(input())
y=0
for i in range(N//5,-1,-1):
if (N-5*i)%3==0:
y+=1
print(i+(N-5*i)//3)
break
if y==0:print(-1)
๐งโ๏ธ greedy ๊ด์ ๋ถ์
: ๊ฐ๋ณ ์ํฉ) ์คํ ๋ฐฐ๋ฌํ ๋ 3kg / 5kg ๋ด์ง ์ค 1๊ฐ ์ ํํด์ ๋ฐฐ๋ฌํ๊ธฐ
: ์ข ํฉ ์ํฉ) ์ ํํ Nkg ๋ฐฐ๋ฌ / ์ต์ ์ ์ข ํฉ ์ํฉ) ์ต์ ๋ด์ง์๋ก ๋ฐฐ๋ฌํ๊ธฐ
โ ์ต์ ์ ์ข ํฉ ์ํฉ์ ์ต์ ์ ๊ฐ๋ณ ์ํฉ์ ๋ชจ์์ผ๋ก ๋ง๋ค ์ ์๊ณ , ๊ฐ๋ณ ์ํฉ์ ์ต์ greedy ์๋ฃจ์ ์ ๋ด์ง์๊ฐ ์ต์๊ฐ์ด ๋์ด์ผ ํ๋ค. ๋จผ์ 5kg์ ์ต๋ ์๋ก ๋ฐฐ๋ฌํ ์ ์๋ ์ง 5kg์ผ๋ก ๋๋ ๋ชซ๋ถํฐ 1๊น์ง ์ฐจ๋ก๋๋ก ๊ฐ์ํ๋ฉฐ 5kg์ ๋๋ ๋๋จธ์ง๋ 3kg๋ก ๋๋ ์ ์๋ ์ง ํ์ธ (ํ์ธ๋๋ฉด break)
โ 14916 ๊ฑฐ์ค๋ฆ๋ โ
n=int(input())
flag=False
for i in range(n//5,-1,-1):
if (n-i*5)%2==0:
flag=True
print(i+(n-i*5)//2)
break
if not flag: print(-1)
๐งโ๏ธ ์ [2839 ์คํ๋ฐฐ๋ฌ] ๋ฌธ์ ์ ์์ ํ ๋๊ฐ์ ๋ฌธ์ . 2์๋ณด๋ค 5์์ด ์ฐ์ ์๋์ด์ผ ๋ด์ง ๊ฐ์๊ฐ ์ต์์ด๋ฏ๋ก 5์ ๋จผ์ ์์๋ณด๋ greedy. ์ค๋ช ์๋ต
โ 1246 ์จ๋ผ์ธ ํ๋งค โ
import sys
def input(): return sys.stdin.readline().rstrip()
N,M = map(int, input().split())
num=M
Ps = [int(input()) for _ in range(M)]
Ps.sort()
sug_price,max_profit=0,0
for price in Ps:
n=min(num,N)
if n*price > max_profit:
max_profit = n*price
sug_price = price
num-=1
print(sug_price, max_profit)
๐งโ๏ธ greedy ๊ด์ ๋ถ์
: ๊ฐ๋ณ ์ํฉ) ๊ฐ ๊ณ ๊ฐ๋ณ Pi๊ฐ ๊ฒฝ๋๊ฐ ์ฑ ์ ํ A ๊ฐ๊ฒฉ๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ๋ค๋ฉด ๊ตฌ๋งค
: ์ข ํฉ ์ํฉ) ๊ณ ๊ฐ ์ผ๋ถ๋ ์ฌ๊ณ , ์ผ๋ถ๋ ์ฌ์ง ์์์ ์์ต ๋ด๊ธฐ / ์ต์ ์ ์ข ํฉ ์ํฉ) ์ข ํฉ ์ต๋ ์์ต์ ๊ฐ์ฅ ๋ฎ์ A ๊ฐ๊ฒฉ
โ ์ต์ ์ ์ข ํฉ ์ํฉ์ ์ต์ ์ ๊ฐ๋ณ ์ํฉ์ ๋ชจ์์ผ๋ก ๋ง๋ค ์ ์๊ณ , ๊ฐ๋ณ ์ํฉ์ ์ต์ greedy ์๋ฃจ์ ์ ์์ต์ ์ต๋ / ๊ฐ๊ฒฉ A๋ ์ต์. Pi ์ ๋ ฌํ๊ณ ๋ฎ์ Pi๋ถํฐ Pi x (min(๋ฌ๊ฑ๊ฐ์, ์ฑ ์ ๊ฐ๊ฒฉ์ ๋ฐ๋ฅธ ๊ตฌ๋งค ๊ฐ๋ฅ์ธ์์))์ ์ต๋๊ฐ update
: ์ฃผ์ด์ง Pi๋ง(*greedy) ํ์ธ → ๋ฌ๊ฑ ๊ฐ์์ ๊ตฌ๋งค ๊ฐ๋ฅ์ธ์์ ์ ํด์ง ์ํ์์ Pi๊ฐ ๋ฌด์กฐ๊ฑด ์ต๋์ด๋ฏ๋ก
โ 11399 ATM โ
import sys
input=sys.stdin.readline
input()
P=list(map(int,input().split()))
P.sort()
ans,a=0,0
for t in P:
a+=t
ans+=a
print(ans)
๐ greedy ๊ด์ ๋ถ์
: ๊ฐ๋ณ ์ํฉ) ATM ์ธ์ถ
: ์ข ํฉ ์ํฉ) ๋ชจ๋ ์ธ์ถํ๊ณ ๋ ๋ค์ ์ต์ข ์๊ฐ / ์ต์ ์ ์ข ํฉ ์ํฉ) ์ต์ข ์๊ฐ ์ต์๊ฐ
โ ์ต์ ์ ์ข ํฉ ์ํฉ์ ์ต์ ์ ๊ฐ๋ณ ์ํฉ์ ๋ชจ์์ผ๋ก ๋ง๋ค ์ ์๊ณ , ๊ฐ๋ณ ์ํฉ์ ์ต์ greedy ์๋ฃจ์ ์ ๋นจ๋ฆฌ ์ธ์ถํ ์ ์๋ ์ฌ๋์ ๋จผ์ (Pi๊ฐ์ด ์์ ์) ์ธ์ถํ๊ฒ๋ ํด์ผ ์ต์ข ์๊ฐ ์ต์
โ 20044 Project Teams โ
import sys
input=sys.stdin.readline
n = int(input())
s = sorted(list(map(int, input().split())))
w = s[0] + s[-1]
l = len(s)
for i in range(l//2):
w = min(w, s[i] + s[l-1-i])
print(w)
๐งโ๏ธ greedy ๊ด์ ๋ถ์
: ๊ฐ๋ณ ์ํฉ) 2์ธ 1์กฐ๋ก ํ์ ๋ค์ด๊ฐ ์ฝ๋ฉ ์ญ๋ 2๊ฐ ์ ํ
: ์ข ํฉ ์ํฉ) ๋ชจ๋ ํ์ ๊ฐ๊ฐ์ ํ ์ฝ๋ฉ ์ญ๋ / ์ต์ ์ ์ข ํฉ ์ํฉ) ๊ฐ๊ฐ์ ํ ์ฝ๋ฉ ์ญ๋ ์ค ์ต์๊ฐ
โ ์ต์ ์ ์ข ํฉ ์ํฉ์ ์ต์ ์ ๊ฐ๋ณ ์ํฉ์ ๋ชจ์์ผ๋ก ๋ง๋ค ์ ์๊ณ , ๊ฐ๋ณ ์ํฉ์ ์ต์ greedy ์๋ฃจ์ ์ ํ ์ฝ๋ฉ ์ญ๋์ด ์ต๋ํ ํ๋ณ๋ก ์ผ์ ํ๊ฒ ์ ์งํ๊ธฐ ์ํด์ ์ ๋ ฌํด ์ผ์ชฝ๊ณผ ์ค๋ฅธ์ชฝ์์๋ถํฐ ๊ฐ๊ฐ ์์ํด ์ต์๊ฐ๊ณผ ์ต๋๊ฐ์ ํฉ์ผ๋ก ๋ฌถ์ด ํ์ ๋ง๋ค์ด ๋๊ฐ๋ค. (๋น๋๊ธฐ ์ง์ ์๋ฆฌ์ ์ํด, ์ด์ ๋ฐํ๊ฒ ํ์ ๊ตฌ์ฑํ๋ฉด ์ ์ด๋ ํ ํ์ ๋ค๋ฅธ ํ์ ๋นํด ๋ ๋ช ๋ชจ๋ ํ์ ์ญ๋์ด ์ ๊ฒ ์ฐ์ถ๋๋ค.)
โป ์ฆ, ์ ๋ฌธ์ ์ $S_m$๊ฐ์ด ์ต๋๊ฐ ๋๊ธฐ ์ํด์ ์ต๋ํ ํ๋ผ๋ฆฌ ํฉ์ ์ฐจ์ด๊ฐ ์๋๋๋ก ๊ณตํํ๊ฒ ์์ชฝ์์ ๊ฐ์ด๋ฐ๋ก ์งํํ๋ฉฐ ํฉ์ ๊ตฌํด์ผ ํจ
(์ง๊ด์ ์ฆ๋ช ์ด ๋ค์ ๊ฐ๋ฏธ๋จ..!)
โ 1448 ์ผ๊ฐํ ๋ง๋ค๊ธฐ โ
import sys
input = sys.stdin.readline
N = int(input())
y = -1
straws = [int(input()) for i in range(N)]
straws.sort(reverse=True)
for i in range(N-2):
if straws[i] < straws[i+1] + straws[i+2]:
y = straws[i]+straws[i+1]+straws[i+2]
break
print(y)
๐งโ๏ธ ์ผ๊ฐํ์ ๊ฒฐ์ ์กฐ๊ฑด: ์ ์ผ ๊ธด ๋ณ < (๋๋จธ์ง ๋ ๋ณ์ ํฉ)
๐งโ๏ธ greedy ๊ด์ ๋ถ์
: ๊ฐ๋ณ ์ํฉ) ์ผ๊ฐํ์ผ๋ก ๋ง๋ค ์ธ ๊ฐ์ ๋ณ ์ ํ
: ์ข ํฉ ์ํฉ) ์ ํํ ์ธ ๋ณ์ด ์ผ๊ฐํ์ด ๋๋ ์ง ํ์ธ / ์ต์ ์ ์ข ํฉ ์ํฉ) ๋ง๋ค์ด์ง ์ผ๊ฐํ ์ธ ๋ณ์ ํฉ ์ต๋๊ฐ
โ ์ต์ ์ ์ข ํฉ ์ํฉ์ ์ต์ ์ ๊ฐ๋ณ ์ํฉ์ ๋ชจ์์ผ๋ก ๋ง๋ค ์ ์๊ณ , ๊ฐ๋ณ ์ํฉ์ ์ต์ greedy ์๋ฃจ์ ์ ๋จผ์ ์ ๋ ฌ(reverse=True)ํ ๋ค(greedy), ์ต๋๊ฐ๋ถํฐ ๊ทธ ๋ค์ ๋ ๊ฐ์ ๋ณ์ ํฉ์ด ๋ ํฐ ์ง ํ์ธ (์ด ๋, ๋ ํฌ์ง ์๋ค๊ณ ๊ฒฐ๋ก ์ด ๋ฌ์ผ๋ฉด ๊ทธ ์ดํ์ ์๋ ๋ ์์ผ๋ฏ๋ก ๋น์ฐํ ์ผ๊ฐํ์ ๊ฒฐ์ ์กฐ๊ฑด์ ๋ง์กฑ์ํฌ์ ์์ผ๋ฏ๋ก ์ for๋ฌธ i index ๋ฐ๋ก ์ด๋: greedy)
∴ ์ ๋ greedyํ ์ํฉ์ ์ค์ ํด ๋ฉ๋ชจ๋ฆฌ, ์๊ฐ ์ด๊ณผ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๋ค! (greedy์ ์ฅ์ )
โ 13305 ์ฃผ์ ์ โ
๐งโ๏ธ greedy ๊ด์ ๋ถ์
: ๊ฐ๋ณ ์ํฉ) ๊ฐ ๊ตฌ๊ฐ ๊ฑฐ๋ฆฌ๋ณ ์ ํํ ์ฃผ์ ์
: ์ข ํฉ ์ํฉ) ๋ชฉ์ ์ง๊น์ง ๋์ฐฉ ํ ์ง๋ถํ ๊ธ์ก / ์ต์ ์ ์ข ํฉ ์ํฉ) ์ง๋ถ ๊ธ์ก์ด ์ต์
โ ์ต์ ์ ์ข ํฉ ์ํฉ์ ์ต์ ์ ๊ฐ๋ณ ์ํฉ์ ๋ชจ์์ผ๋ก ๋ง๋ค ์ ์๊ณ , ๊ฐ๋ณ ์ํฉ์ ์ต์ greedy ์๋ฃจ์ ์ ์ด์ฐจํผ ๊ตฌ๊ฐ ๊ฑฐ๋ฆฌ๋ ๋ชจ๋ mulsum์ผ๋ก ๊ณฑํด์ง๋ฏ๋ก, ์ฐ๋ฆฌ๊ฐ ๋ฐ๊ฟ ์ ์๋ ๊ฑด ์ฃผ์ ์ ๊ฐ๊ฒฉ. ์ข ํฉ ๊ธ์ก์ด ์ต์์ผ๋ ค๋ฉด ํ์ฌ ๊ตฌ๊ฐ๊น์ง์ ์ฃผ์ ์ ๊ฐ๊ฒฉ์ ์ต์๊ฐ์ผ๋ก updateํ๋ฉด์ ๊ณ์ ๊ฐ๊ฒฉ์ ๊ตฌํด๋๊ฐ
import sys
input=sys.stdin.readline
N = int(input())
t=0
dist=list(map(int, input().split()))
price=list(map(int, input().split()))
cur_min_price=price[0]
price=price[:-1]
for i in range(N-1):
if price[i]<cur_min_price:
cur_min_price=price[i]
t+=price[i]*dist[i]
else:t+=cur_min_price*dist[i]
print(t)
โ 1343 ํด๋ฆฌ์ค๋ฏธ๋ ธ โ
import sys
input = sys.stdin.readline
board = list(input())
length = len(board)
Xs,ans=[],[]
cnt = 0
possible = True
for i in range(length):
if board[i] == 'X':
cnt += 1
else:
Xs.append(cnt)
cnt = 0
if i == (length-1) and cnt != 0:
Xs.append(cnt)
for i in range(len(Xs)):
if Xs[i]%2 == 1:
possible = False
print(-1)
break
if (Xs[i]//4) != 0:
ans.append('AAAA'*(Xs[i]//4))
if (Xs[i]%4) != 0:
ans.append('BB'*((Xs[i]%4)//2))
if i != (len(Xs)-1):
ans.append('.')
if possible: print(*ans,sep='')
๐งโ๏ธ ์ฌ์ ์์ผ๋ก ๊ฐ์ฅ ์์๋ ๋ต์ ์ถ๋ ฅํด์ผ ํ๋ฏ๋ก ๋น์ฅ์ ์ ํ์ง (1) AAAA (2) BB ์ค์์ (1)์ ๋ฌด์กฐ๊ฑด ๊ณจ๋ผ์ผ ํ๋ค! ๋ค๋ง, ์ด ๋ ๋ณด๋ํ์ ๋ฎ์ ๋ ๋ช๊ฐ์ง ์๊ฐํ ์ํฉ๋ง ๊ณ ๋ คํด์ ์ฝ๋ฉํด์ฃผ๋ฉด ๋!
๐งโ๏ธAAAA๋ก ๋ฎ์ ๋ ๊ณ ๋ ค ์ํฉ
(1) ๋จผ์ X๋ฌถ์๋ด์ X๊ฐ์๋ฅผ ์ญ ์์์ผ ํ๋ค. (.์ ๋ง๋๋ฉด ๊ทธ ์ ๊น์ง X ๋ฌถ์์ด ์์ฑ)
(2) X๊ฐ์๊ฐ ๋ค์ด๊ฐ Xs๋ฅผ list๋ก ๋๋ฆฌ๋ฉด์
→ X์ ๊ฐ์๊ฐ ํ์๋ฉด ๋ณด๋ํ์ AAAA, BB๋ก ๋ฎ์ ์ ์์ผ๋ฏ๋ก -1 ์ถ๋ ฅ. ๋ฐ๋ก break
→ X์ ๊ฐ์๊ฐ ์ง์์ผ ๊ฒฝ์ฐ 4๋ก ๋๋ ๋ชซ ๊ฐ์๋งํผ AAAA๋ก ๋จผ์ ๋ฎ๊ณ (greedy), 4๋ก ๋๋ ๋๋จธ์ง๊ฐ 2์ผ ๊ฒฝ์ฐ BB๋ฅผ ๊ทธ ๋ค์ ๋ฎ์ด์ค๋ค.
(3) ํ๋ฒ X๋ฌถ์์ ๋ชจ๋ ๋ฎ๊ณ ๋๋ฉด .์ผ๋ก ๋ง๋ฌด๋ฆฌ
๐งโ๏ธ greedy ๊ด์ ๋ถ์
: ๊ฐ๋ณ ์ํฉ) ๊ฐ ๋ฌธ์๋ฅผ A๋ก ๋ฐ๊พธ๊ฑฐ๋ B๋ก ๋ฐ๊พธ๊ฑฐ๋ ๊ทธ๋๋ก ๋๋๊ฑฐ๋
: ์ข ํฉ ์ํฉ) ์ต์ข ์ ์ผ๋ก ๋ฐ๋ ๋ณด๋ํ / ์ต์ ์ ์ข ํฉ ์ํฉ) ๋ฐ๋ ๋ณด๋ํ์ด ์ฌ์ ์์ผ๋ก ์ ์ผ ์์๋ ๊ฒฝ์ฐ ์ถ๋ ฅ
โ ์ต์ ์ ์ข ํฉ ์ํฉ์ ์ต์ ์ ๊ฐ๋ณ ์ํฉ์ ๋ชจ์์ผ๋ก ๋ง๋ค ์ ์๊ณ , ๊ฐ๋ณ ์ํฉ์ ์ต์ greedy ์๋ฃจ์ ์ ์ต๋ํ AAAA๋ก ๋ฎ๊ธฐ(X๊ฐ ํ์์ด๋ฉด ๋ถ๊ฐ๋ฅํ๋ฏ๋ก -1, ์ง์๋ผ๋ฉด 4๋ก ๋๋ ๋ชซ์ A๋ก 4๋ก ๋๋ ๋๋จธ์ง(์ฆ 2๊ฐ)๋ B๋ก ๋ฎ๊ธฐ
๐งโ๏ธ ans list์ ๊ณ์ ๊ฒฐ๊ณผ๋ฅผ appendํ๋ฉด์ ์ต์ข ๊ฒฐ๊ณผ ์ถ๋ ฅ!
++ ์ถ๊ฐ๋ก python replace ํจ์๋ฅผ ์ด์ฉํ๋ฉด ํ๋ฒ์ ํ ์ ์๋ค. XXXX๋จผ์ AAAA๋ก ๊น๊ณ ๋จ์ XX๋ฅผ BB๋ก ๊น๋ค. ๊ทธ๋๋ X๊ฐ ๋จ์ผ๋ฉด -1 ์ถ๋ ฅ
board = input().replace('XXXX', 'AAAA').replace('XX', 'BB')
print(-1 if 'X' in board else board)
โ 12845 ๋ชจ๋์ ๋ง๋ธ โ
import sys
input=sys.stdin.readline
n=int(input())
L=list(map(int,input().split()))
print(max(L)*(n-1)+sum(L)-max(L))
๐งโ๏ธ ์ธ์ ํ ์นด๋ ์์ ๊ฐ์๋ ์ ํด์ ธ ์๋ค. ์ต๋๊ฐ์ ๊ตฌํ ํ, ์ต๋๊ฐ์ ๊ธฐ์ค์ผ๋ก ์์์ผ๋ก ์์ผ๋ก ๋ป์ด๋๊ฐ๋ฉด์ ๋งค๋ฒ ๋ํ๋ ์ ๋ด๋ถ์ ์ต๋๊ฐ์ด ๋ฌด์กฐ๊ฑด ์ ์ฉ๋๊ฒ ํ๋ค. (greedy)
: ์ ํด์ง ์ธ์ ์ ๊ฐ์ ๋ด์์ ๊ฐ๊ฐ์ ์์ ์ต๋๊ฐ์ด ๋ค์ด๊ฐ๊ฒ ํ๋ greedyํ ์ํฉ ์ ํ, ์ต๋๊ฐ ์ ์ธ ๋ชจ๋ ์นด๋์ ์ซ์๋ ๊ฐ ์์์ ํ ๋ฒ์ฉ ๋ํด์ง๋ฏ๋ก ์ต๋๊ฐ x (์์ ๊ฐ์) + (์ต๋๊ฐ ์ ์ธ ๋ชจ๋ ์นด๋ ์ซ์ ํฉ)
โ 20310 ํ๋ ธ์ค โ
S=input()
zero=S.count('0')//2
one=S.count('1')//2
ans=[]
zero_cnt,one_cnt=0,0
for n in S:
if n == '0':
if zero_cnt < zero:
ans.append(0)
zero_cnt+=1
else:
if one_cnt >= one:
ans.append(1)
else:
one_cnt+=1
print(*ans,sep='')
๐งโ๏ธ0๊ณผ 1์ ๊ฐฏ์๋ ์ ํด์ ธ ์๋ ์ํ์์ ๊ฐ์ฅ ์ฌ์ ์์ผ๋ก ์์๋ ์ซ์๋ฅผ ์ฐพ์ผ๋ ค๋ฉด 0์ ์ค๋ฅธ์ชฝ๋ถํฐ ์ง์์ผ ํ๊ณ , 1์ ์ผ์ชฝ๋ถํฐ ์ง์์ผ ํ๋ค.
: ์ ํด์ง ๊ฐฏ์ ์ํฉ ๋ด์์ ์ต์ ์ ๊ฒฐ๊ณผ๋ฅผ ๋ด๊ธฐ ์ํด ์ผ์ชฝ๋ถํฐ 0์ ๋๋๊ณ 1์ ์ง์ฐ๋ greedyํ ์ํฉ! ๋ฌธ์ ๋ง ๋ฐ๋ก ์ฝ์ผ๋ฉด ๋ฐ๋ก ํ๋ฆผ.
โ 15904 UCPC๋ ๋ฌด์์ ์ฝ์์ผ๊น? โ
i=0
for s in input():
if s=='U' and i==0:i+=1
if s=='C' and i==1:i+=1
if s=='P' and i==2:i+=1
if s=='C' and i==3:
i+=1
break
print('I love UCPC'if i==4 else'I hate UCPC')
๐ greedy ๊ด์ ๋ถ์
: ๊ฐ๋ณ ์ํฉ) ๋งค ๋ฌธ์๋ฅผ ํ์ธํ๋ ์ํฉ
: ์ข ํฉ ์ํฉ) ๋ฌธ์๋ฅผ ํ์ธํด์ UCPC ํ์ธํ ์ ์๋ ์ง ์ฒดํฌ
โ ์ต์ ์ ์ข ํฉ ์ํฉ์ ์ต์ ์ ๊ฐ๋ณ ์ํฉ์ ๋ชจ์์ผ๋ก ๋ง๋ค ์ ์๊ณ , ๊ฐ๋ณ ์ํฉ์ ์ต์ greedy ์๋ฃจ์ ์ U → C → P → C ์์๋ก ํ์ธ(๋ค ๊ตฌํ๋ฉด break)
โ 2217 ๋กํ โ
import sys
input=sys.stdin.readline
N=int(input())
ropes=[int(input()) for _ in range(N)]
ropes.sort()
i,ans=0,0
for rope in ropes:
ans=max(ans,rope*(N-i))
i+=1
print(ans)
๐ greedy ๊ด์ ๋ถ์
: ๊ฐ๋ณ ์ํฉ) ์ฃผ์ด์ง ๋กํ์ ๊ฐ์ x์์ ๋ค์ด์ฌ๋ฆฐ ์ต๋ ์ค๋
: ์ข ํฉ ์ํฉ) ์ฃผ์ด์ง ๋กํ์ ์ฌ๋ฌ ๊ฐ์์์ ์ต๋ ์ค๋ ๋ชจ์ / ์ต์ ์ ์ข ํฉ ์ํฉ) ๊ทธ ์ค ์ต๋๊ฐ
โ ์ต์ ์ ์ข ํฉ ์ํฉ์ ์ต์ ์ ๊ฐ๋ณ ์ํฉ์ ๋ชจ์์ผ๋ก ๋ง๋ค ์ ์๊ณ , ๊ฐ๋ณ ์ํฉ์ ์ต์ greedy ์๋ฃจ์ ์ (๋จผ์ ropes ์ค๋ฆ์ฐจ์ ์ ๋ ฌ) ex) 1๊ฐ์ผ ๊ฒฝ์ฐ (๊ฐ์ฅ ํฐ rope * 1) / 2๊ฐ์ผ ๊ฒฝ์ฐ ๊ฐ์ฅ ํฐ rope๊ณผ ๊ทธ ๋ค์ ํฐ rope ์ฌ์ฉ ๊ฐ๋ฅํ๊ณ ๊ทธ ์ค ์ต์๊ฐ์ธ (๊ทธ ๋ค์ ํฐ rope * 2) /... ์ ์ฒด N๊ฐ์ผ ๊ฒฝ์ฐ (์ต์๊ฐ rope * N) → ๊ฐ๊ฐ์ ๋ชจ๋ ๊ฒฝ์ฐ์ค ์ต๋๊ฐ ๊ตฌํ๊ธฐ
โ 29198 ์ด๋ฒ์๋ C๋ฒ์ด ๋ฌธ์์ด โ
import sys
input=sys.stdin.readline
N,M,K=map(int,input().split())
print(''.join(sorted(''.join(sorted([''.join(sorted(input().strip())) for _ in range(N)])[:K]))))
โ greedy 3๋ฒ ์ ์ฉ → ์ ๋ ฌ 3๋ฒ ์ ์ฉ ๋ฌธ์ / 2023 KSA Automata Summer Contest ๊ธฐ์ถ
๐ greedy ๊ด์ ๋ถ์
: ๊ฐ๋ณ ์ํฉ) ๋ฌธ์์ด K๊ฐ ์ ํํ ๋ค ๋ง๋ค์ด์ง KxM๊ฐ์ ๋ฌธ์์ค 1๊ฐ์ฉ ์ ํ
: ์ข ํฉ ์ํฉ) ๊ธธ์ด KxM์ ๋ฌธ์์ด T ๋ง๋ค๊ธฐ / ์ต์ ์ ์ข ํฉ ์ํฉ) ์ฌ์ ์์ผ๋ก ๊ฐ์ฅ ๋จผ์ ์ค๋ ๋ฌธ์์ด T ๋ง๋ค๊ธฐ
โ ์ต์ ์ ์ข ํฉ ์ํฉ์ ์ต์ ์ ๊ฐ๋ณ ์ํฉ์ ๋ชจ์์ผ๋ก ๋ง๋ค ์ ์๊ณ , ๊ฐ๋ณ ์ํฉ์ ์ต์ greedy ์๋ฃจ์ ์ (1) ๋จผ์ ์ ๋ ฌ๋ ๋ฌธ์์ด S1 ~ Sn ์ค, ์ ๋ ฌํด ์ฌ์ ์ ๊ฐ์ฅ ์์ ์ค๋ ๋ฌธ์์ด K๊ฐ ์ ํ (2) ์ด KxM๊ฐ์ ๋ชจ๋ ๋ฌธ์๋ฅผ ์ ๋ ฌ(์ฌ์ ์ ์ ๋ ฌ)
: ์ฌ๊ธฐ์ ์ค์ํ ๊ฑด, ๋ฌธ์๋ฅผ ์๋ก ์์ด ์ฌ๋ฐฐ์นํ ์ ์์. ๋ฐ๋ผ์ (1) ๋ฌธ์์ด ๋ด๋ถ ๋จผ์ ์ ๋ ฌ / (2) K๊ฐ ์ ํ์ ์ํด ๋ฌธ์์ด์ ์ ๋ ฌ / (3) ๋ง๋ค์ด์ง KxM๊ฐ์ ๋ฌธ์๋ฅผ ์ ๋ ฌ โถ ์ฐ์ ์ ์ผ๋ก ๋งจ ์์๋ฆฌ๊ฐ ๋ท์๋ฆฌ๋ณด๋ค ์ฌ์ ์์ผ๋ก ์ค์ํ๊ธฐ ๋๋ฌธ์ greedy์๋ฆฌ ์ ์ฉ
'BOJ > ๐ฅ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
โ Recursion Intermediate - 2 Solvedโ (0) | 2022.12.11 |
---|---|
โ Binary Search Intermediate I - 9 Solvedโ (0) | 2022.12.07 |
โ Implementation&Simulation Intermediate I - 20 Solvedโ (0) | 2022.11.28 |
โ Math & Geometry Intermediate I - 13 Solvedโ (0) | 2022.11.22 |
โ BF Intermediate I - 14 Solvedโ (0) | 2022.11.21 |
๋๊ธ