โ 1744 ์ ๋ฌถ๊ธฐ โ
import sys
input=sys.stdin.readline
N=int(input())
arr=[int(input()) for _ in range(N)]
ans=0
pos,neg,zero,one=[],[],[],[]
for n in arr:
if n==0: zero.append(0)
elif n==1: one.append(1)
elif n>0: pos.append(n)
else: neg.append(n)
#1. don't tie ones
ans+=len(one)
#2.tie pos(from the biggest)
pos.sort(reverse=True)
for i in range(0,len(pos),2):
if i==len(pos)-1:ans+=pos[i]
else:ans+=(pos[i]*pos[i+1])
#3.tie neg(from the smallest, if one left, if zero exists, don't add or add)
neg.sort()
for i in range(0,len(neg),2):
if i==len(neg)-1:
if len(zero)==0: ans+=neg[i]
else:ans+=(neg[i]*neg[i+1])
print(ans)
๐ฆ ๋ฌธ์ ์ค๋ช , ๋ ๊ฐ๋ก ๋ฌถ์ด์ ๋ ๊ฐ์ ์๋ฅผ ๊ณฑํ๊ฑฐ๋, ๊ทธ๋๋ก ๋๋๊ฑฐ๋, ๋ ์ค 1๊ฐ๋ฅผ ํํด์ ์ฐ์ฐ ๊ฒฐ๊ณผ ์ต๋๊ฐ
๐ฆ greedy ๊ด์ ๋ถ์
: ๊ฐ๋ณ ์ํฉ) ์ธ์ ํ ์ผ์ชฝ ๋๋ ์ค๋ฅธ์ชฝ ์์ ๋ฌถ์ ์ง / ์ ๋ฌถ์ ์ง ๊ฒฐ์
: ์ข ํฉ ์ํฉ) ๊ฐ๊ฐ์ ํญ(๋ฌถ์ mulsum ๋๋ ๊ฐ๋ณ) ํฉ ๊ตฌํ๊ธฐ / ์ต์ ์ ์ข ํฉ ์ํฉ) ํฉ ์ต๋๊ฐ
โ ์ต์ ์ ์ข ํฉ ์ํฉ์ ์ต์ ์ ๊ฐ๋ณ ์ํฉ์ ๋ชจ์์ผ๋ก ๋ง๋ค ์ ์๊ณ , ๊ฐ๋ณ ์ํฉ์ ์ต์ greedy ์๋ฃจ์ ์ (1) ์์์ผ ๊ฒฝ์ฐ(1 ์ ์ธ) / (2) ์์์ผ ๊ฒฝ์ฐ / (3) 0์ผ ๊ฒฝ์ฐ / (4) 1์ผ ๊ฒฝ์ฐ : 4๊ฐ์ง์ ์ํฉ์ผ๋ก ๋๋ ์ ์๋ค.
โ ๋ ์๊ฐ์ ์ฐ์ฐ์์ ์ด ์๋์ ๊ฐ์ 10๊ฐ์ง ์ํฉ์ผ๋ก ๋์ค๊ฒ ๋๋๋ฐ
โ 1 ์ ์ธ ์์์ 1 ์ ์ธ ์์: ๊ณฑ ์ฐ์
โก 1 ์ ์ธ ์์์ ์์: ํฉ ์ฐ์
โข 1 ์ ์ธ ์์์ 0: ํฉ ์ฐ์
โฃ 1 ์ ์ธ ์์์ 1: ํฉ ์ฐ์
โค ์์์ 0: ๊ณฑ ์ฐ์
โฅ ์์์ 1: ํฉ ์ฐ์
โฆ ์์์ ์์: ๊ณฑ ์ฐ์
โง 0๊ณผ 1: ํฉ ์ฐ์
โจ 0๊ณผ 0: ํฉ ์ฐ์
โฉ 1๊ณผ 1: ํฉ ์ฐ์
โถ 1์ด ๋ค์ด๊ฐ๋ โฃโฅโงโฉ 4๊ฐ์ case๋ ๋ฌด์กฐ๊ฑด ํฉ์ด ์ฐ์ ๋๋ฏ๋ก ๋ฌถ์ ์ผ์ด ์๋ค. ๋ฐ๋ผ์ (#1. ๋จผ์ 1๋ง ๋นผ๋๊ณ 1์ ๊ฐ์๋ฅผ ๋ํ๋ค.)
โถ ์์ ๊ฐ์ด ๋ฌถ์ด์ผ ํ๋ pair ์ข ๋ฅ๋ ์ ํํ ์ธ ์์ด๋ค. ๊ณฑ์ด ํฉ๋ณด๋ค ์ฐ์ ๋๋ฏ๋ก case โ ์ 1์ ์ธ ์์๋ โค์ โฆ์ ํด๋น๋์ง ์์ผ๋ฏ๋ก (#2. ๋จผ์ 1์ ์ธ ์์๋ง list๋ก ๋นผ์ pair๊ฐ์ mulsum์ ๊ตฌํ๋ค.(์ด ๋ sortingํด์ ํฐ ์๋ถํฐ ์ฐจ๋ก๋๋ก ๊ฐ์ ์(greedy)์ผ๋ก ์ฌ๋ฌ pair์ฉ ๊ณจ๋ผ mulsum / ๋ง์ฝ 1์ ์ธ ์์๊ฐ 1๊ฐ ๋จ๋๋ค๋ฉด ๋๋จธ์ง ์ข ๋ฅ์ ์ฎ์ง ๋ง๊ณ ๊ทธ๋๋ก ํฉ)
โถ ์ค์ํ ๊ฑด case โค์ case โฆ์ธ๋ฐ, ์์๊ฐ ๋ case์ ๊ฒน์น๋ค. ์ด ์ค์ ๋จผ์ ์ฐ์ ๋๋ ๊ฑด(greedy) ์์์ ์์์ ๊ณฑ์ธ case โฆ ์ด๋ค. ์์์ ์์๋ฅผ ๊ณฑํ๋ฉด 0์ด ์๋์ค๊ณ ์์๊ฐ ๋์ค๋ฏ๋ก ๋ ํฐ ๊ฒฐ๊ณผ๊ฐ ๋์ด. ๋ฐ๋ผ์ greedyํ๊ฒ case โค๋ฅผ ๋จผ์ ํ๊ธฐ ์ํด (#3. ์ 1 ์ ์ธ ์์๊ฐ์ ๊ณฑ case โ ์ฒ๋ผ ๋จผ์ ์์๋ง list๋ก ๋นผ์ pair๊ฐ์ mulsum์ ๊ตฌํ๋ค.(์ด ๋ sortingํด์ ์์ ์๋ถํฐ ์ฐจ๋ก๋๋ก ์ฆ๊ฐ ์(greedy)์ผ๋ก ์ฌ๋ฌ pair์ฉ ๊ณจ๋ผ mulsum)
โถ ๊ทธ ๋ค์ ๋จ์ case ์ค case โฆ์ด ์ฐ์ ๋๋ฏ๋ก(greedy), (#3. ์ case โค์์ ์์๊ฐ 1๊ฐ ๋จ์๊ณ 0์ด ์๋ ์ํ๋ผ๋ฉด ๊ณฑ ๋ฐ์ / ๋ง์ฝ ์์๊ฐ 1๊ฐ ๋จ์๋๋ฐ 0์ด ์๋ค๋ฉด ๊ทธ๋๋ก ํฉ)
โถ ๊ณฑ์ ํด์ผํ๋ ์ ์ธ๊ฐ์ง case๋ฅผ ๋ชจ๋ ์ดํด๋ณด์์ผ๋ฏ๋ก ๋๋จธ์ง ์ซ์๋ค์ 0๋ง ๋จ์. the end.
โ 12904 A์ B โ
S=input()
T=input()
l=len(S)
while 1:
if len(T)==l:
if T==S: print(1)
else: print(0)
break
if T[-1] == 'A':
T=T[:-1]
else:
T=T[:-1][::-1]
๐ฆ S → T๋ฅผ T → S๋ก ๋ฐฉํฅ์ ๋ฐ๊พธ๋ฉด
โ ๋์ ๋ฌธ์๊ฐ A์ธ ๊ฒฝ์ฐ: ๋ฌธ์์ด์ ๋ค์ A๋ฅผ ์ถ๊ฐํ๋ค → A๋ฅผ ๊ทธ์ ์ ์ธํ๋ค
โก ๋์ ๋ฌธ์๊ฐ B์ธ ๊ฒฝ์ฐ: ๋ฌธ์์ด์ ๋ค์ง๊ณ ๋ค์ B๋ฅผ ์ถ๊ฐํ๋ค → B๋ฅผ ์ ์ธํ๊ณ ๋ค์ง๋๋ค
: ์ด๋ฏธ A๊ฐ ๋ถ๋ ๊ฒฝ์ฐ, B๊ฐ ๋ถ๋ ๊ฒฝ์ฐ๊ฐ ์ฐจ๋ก๋๋ก ๋ฌธ์์ด์ ์์ฑํ๋ฉด์ ์ ํด์ ธ ์์. ์์ ๋๊ทธ๋ผ๋ฏธ ๊ฒฝ๋ก๋๋ก T๋ผ๋ ๋ฌธ์์ด์ด ๋ง๋ค์ด์ง๊ธฐ๊น์ง์ ๊ณผ์ ์ ๋ฌธ์์ด๋ค์ด ์ด๋ฏธ ์ ํด์ง / S๋ผ๋ ๋ฌธ์์ด์ ๊ธธ์ด๊ฐ ๊ฐ์ ๋ T๋ฅผ ๊ฑฐ๊พธ๋ก ๋์ ๊ฐ๋ค๋ฉด ๋ฐ๋ก 1 ์ถ๋ ฅ, ๊ฐ์ง ์๋ค๋ฉด ๋์ฌ ์ ์๋ ๋ฌธ์์ด์ด๋ฏ๋ก 0 ์ถ๋ ฅ
โ 30805 ์ฌ์ ์ ์ต๋ ๊ณตํต ๋ถ๋ถ ์์ด โ
import sys
input=sys.stdin.readline
N=int(input())
A=list(map(int,input().split()))
M=int(input())
B=list(map(int,input().split()))
nums=[y for y in range(100,0,-1)]
ans=[]
while True:
flag=False
for num in nums:
if num in A and num in B:
flag=True
x=num
ans.append(int(num))
break
if not flag:
break
a,b=A.index(x),B.index(x)
A,B=A[a+1:],B[b+1:]
print(len(ans))
if len(ans) > 0:
print(*ans)
๐ฆ ์ฌ์ ์ ๋์ค์ธ ๊ธฐ์ค์ ๋ณด๋ฉด โ ๋ฌด์กฐ๊ฑด ๊ธด ์์ด์ด ๋์ค / โก ๊ธธ์ด๊ฐ ๊ฐ๋ค๋ฉด ๊ฐ์ฅ ์์ ์๋ ์ซ์๊ฐ ํฐ ์์ด์ด ๋์ค
: ๋ฐ๋ผ์ ๊ฐ์ฅ ํฐ ์ซ์์ธ 100๋ถํฐ ์์ํด์ ๊ณตํต์ผ๋ก ๊ฐ๊ณ ์๋ ์๋ผ๋ฉด, '์ผ์ชฝ ๊ธฐ์ค ๋จผ์ ๋ฑ์ฅํ๋ ์ซ์'๋ฅผ ๊ณ ๋ฅด๋ greedyํ ๊ด์ ์ผ๋ก ์ฌ์ ์ ๊ณตํต ๋ถ๋ถ ์์ด์ ๊ตฌํ ์ ์๋ค. ์๋ฅผ ๋ค์ด 100 100 100 50์ด ์๊ณ 100 100 50์ด ์๋ค๋ฉด, ๊ธธ์ด๊ฐ ๊ธด ์์ด์ด ๋ฌด์กฐ๊ฑด ๋์ค์ด๋ฏ๋ก ์ผ์ชฝ ๊ธฐ์ค ๋จผ์ ๋ฑ์ฅํ๋ ๊ณตํต ์ต๋๊ฐ ์ซ์๋ฅผ ๊ณจ๋ผ์ผ ํ๋ค. ๊ณ ๋ฅด๋ฉด ๊ทธ ์์ ์ซ์๋ค์ greedy ์๋ฆฌ์ ์ํด ์ ๋ต x. ์ค๋ฅธ์ชฝ ์ดํ ๋จ์ ์ซ์๋ค๋ง ๊ณจ๋ผ์ ๋ค์ slicing ํ๊ณ ๋ฐ๋ณต์ ์ผ๋ก ์งํ
โ 7983 ๋ด์ผ ํ ๊ฑฐ์ผ โ
import sys
input=sys.stdin.readline
dts=[]
for _ in range(int(input())):
d,t=map(int,input().split())
dts.append((d,t))
dts=sorted(dts,key=lambda x: x[1], reverse=True)
ans=dts[0][1]
for pair in dts:
if ans > pair[1]:
ans = pair[1] - pair[0]
else: #ans <= pair[1]
ans = ans - pair[0]
print(ans)
๐ฆ greedy 2๋ฒ ์ ์ฉ
โ ๊ณผ์ ๊ฐ๋ฅ ์๊ฐ t์์ ๊ณผ์ ๋ฅผ ํ๋ ์๊ฐ์ greedy์ ์ํด ์ต๋ํ ๋ ๋ถ๋ถ์์ ์ฐ์์ผ๋ก ์์ผ๋ก ๊ณผ์ ์ํ์ด ์ต์ (์ต๋ํ ๋ ธ๋ ๊ฑธ ์ํ๋ฏ๋ก ๋์์๋ถํฐ ๊ณผ์ ๋ฅผ ์ํํ๊ฒ ํด์ผ ํจ)
โก ์ฌ๋ฌ ๊ณผ์ ๊ฐ ์๋ค๋ฉด greedy์ ์ํด ๊ณผ์ ๊ฐ๋ฅ ์๊ฐ t๊ฐ ์ ์ผ ๊ธด ๊ฒ๋ถํฐ ๋จผ์ t ๋์์ ๊ณผ์ ๋ฅผ ์ํํ๋ ๊ฒ ์ต์ (๊ณผ์ ๊ฐ๋ฅ ์๊ฐ์ด ๊ธด ๊ณผ์ ๋ฅผ ๋จผ์ ๋์์ ํด์ฃผ์ด์ผ ์ต๋ํ ์์์ ๋ง์ด ๋ ์ ์์)
→ ๋ฐ๋ผ์ ๊ฐ ๊ณผ์ ๋ฅผ t ๊ฐ์์์ผ๋ก ๋์ดํ๊ณ , ํด๋น ๊ณผ์ t์์ d๋ฅผ ๋นผ๋ ๊ฑธ ์ต์ ์ผ๋ก ์ ํ. ๋ง์ฝ ํ์ฌ ๋ ์ง์ ์ด ํด๋น ๊ณผ์ t๋ณด๋ค ์๊ฑฐ๋ ๊ฐ๋ค๋ฉด ํ์ฌ ๋ ์ง์ ์์ d๋ฅผ ๋นผ๋ ๊ฑธ ์ต์ ์ผ๋ก ์ ํ
: ๊ฐ ๊ณผ์ ์ ์ค๋ฅธ์ชฝ ๋๋ถํฐ ์์ํ๋ ๊ฒ ์ต์ ์ด๋, ์ 10 ๊ณผ์ ์์ 3์ ๋จผ์ ํด๊ฒฐํ๊ณ ๋๋ฉด 7์ด ๋์ด 8 ๊ณผ์ ์ ๊ฒน์นจ. ๋ฐ๋ผ์ 8์ด ์๋ 7์์ ์์ํด 2๋ฅผ ๋นผ์ผ ํจ.
โ 23559 ๋ฐฅ โ
import sys
input=sys.stdin.readline
N,X=map(int,input().split())
choice_A_num = int((X-1000*N)/4000)
menus=[]
for _ in range(N):
menus.append(tuple(map(int,input().split())))
menus.sort(key=lambda x:-(abs(x[0]-x[1])))
ans=0
choice_A_cnt=0
for i in range(N):
if menus[i][0] <= menus[i][1]:
ans+=menus[i][1]
else:
if choice_A_cnt<choice_A_num:
ans+=menus[i][0]
choice_A_cnt+=1
else:
ans+=menus[i][1]
print(ans)
๐ฆ 5000์ ๋ฉ๋ด์ 1000์ ๋ฉ๋ด ์ค 1๊ฐ๋ ๋ฐ๋์ ์ ํ. ์ด ๋ ์จ์ผ ํ๋ ๊ธ์ก X๋ ์ ํด์ ธ ์์. ๋ฐ๋ผ์ ๊ทธ๋ฆฌ๋ ๊ด์ ์์ 5000์ ๋ฉ๋ด ๋ง์ A, 1000์ ๋ฉ๋ด ๋ง์ B๋ผ ํ๋ค๋ฉด A<=B์ผ ๊ฒฝ์ฐ ๋น์ฅ 1000์ ๋ฉ๋ด ์ ํ์ด ์ ์ฒด ๊ตฌ๋งค ๊ธ์ก์ ์ต์ํํจ. ํ์ง๋ง A>B์ผ ๊ฒฝ์ฐ 5000์ ๋ฉ๋ด๋ฅผ ๋น์ฅ ์ ํํ๋ ๊ฒฝ์ฐ๊ฐ, ๋ค๋ฅธ ๊ฒฝ์ฐ๋ฅผ ๊ณ ๋ คํด์ ๊ธ์ก์ด ์ต์๊ฐ ์๋ ์๊ฐ ์๋ค. ์๋ฅผ ๋ค์ด ๋ง์ด 3๊ณผ 1 / 300๊ณผ 299 ์ด๋ ๊ฒ ๋ ์ต์ ์ด ์๋ค๊ณ ํ ๋ 300 > 299๋ผ๊ณ ํด์ ๋น์ฅ ํฐ 300์ ๊ณ ๋ฅธ๋ค๊ณ ํ๋ฉด, ๊ธ์ก ์ 3์ด ์๋ 1์ ์ ํํ๋๋ฐ ๊ทธ๋ ๋ค๋ฉด 301, ํ์ง๋ง ๋ฐ๋๋ก 3์ ์ ํํ๊ณ 299๋ฅผ ์ ํํ๋ฉด 302๊ฐ ๋๋ฏ๋ก ์คํ๋ ค 5000์ ๋ฉ๋ด๋ฅผ 300๋ณด๋ค 3์ด ์ ํํ ๊ฒฝ์ฐ๊ฐ ๋ ์ต์ ์ด๋ค. ๋ฐ๋ผ์ ๊ทธ๋ฆฌ๋ ๊ด์ ์ผ๋ก ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ์, ์ด์ฐจํผ A์ B์ค ํ๋๋ฅผ ์ ํํด์ผ ํ๋ฏ๋ก |A-B|๋ฅผ ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌํด์ |A-B|๊ฐ ๊ฐ์ฅ ํฐ ๊ฒฝ์ฐ๋ถํฐ A๋ฅผ ์ ํด์ค๋ค. ์ ๋๊ฐ์ด ํฐ ๊ฒฝ์ฐ๊ฐ ์ต๋์ ๋ง์ ๋ณผ ์ ์๊ธฐ ๋๋ฌธ. ์ด๋ฏธ ์ ์ด๋ B๋ ๋ค ๋จน์ผ๋ฏ๋ก ๋ง์ ์ต๋๋ก ๋ด๋ ค๋ฉด B๋ก๋ถํฐ ์ฐจ์ด๊ฐ ๋ง์ด ๋๋ ์ผ์ด์ค๋ถํฐ ๊ณ ๋ คํ๋ ๊ฒ ์ต์ .
๐ฆ
(1) |A-B| ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌ, ์ ์ฒด ์ฌ์ฉ ๊ธ์ก์ด ์ ํด์ ธ ์์ผ๋ฏ๋ก B๋ณด๋ค A๋ฅผ ๋จผ์ ์ ํํ ์ ์๋ ํ์(์ choice_A_num) ๊ตฌํ๊ธฐ
(2) A<=B์ธ ๊ฒฝ์ฐ๋ ๋ฌด์กฐ๊ฑด B ์ ํ
(3) A>B์ธ ๊ฒฝ์ฐ๋ |A-B| ํฐ ์์ผ๋ก choice_A_num์ด 0๋ณด๋ค ํฐ ๋์ A ์ ํ → choice_A_num์ ๋ค ์ฐ๋ฉด B ์ ํ
'BOJ > ๐ฅ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
โ Greedy Upper-Advanced I - 1 Solvedโ (1) | 2023.10.18 |
---|---|
โ BF Advanced I - 3 Solvedโ (0) | 2023.10.06 |
โ Sorting Advanced I - 5 Solvedโ (0) | 2023.07.28 |
โ DP Advanced I - 6 Solvedโ (0) | 2023.01.08 |
โ hashing ์๊ธ - 1๋ฌธ์ ()โ (0) | 2022.11.06 |
๋๊ธ