์ธ์ ๋ณต์กํ๊ณ ๊น๋ค๋ก์ ๋ค..
์ด๊ฒ ์ ๊ฒ ์๋ํด๋ณด์๋๋ฐ 12์ด๋ ์ฃผ์ด์ง ์๊ฐ์ด ์๊พธ ์ด๊ณผ๋ผ์ ์ดํ์ด๋ ๊ฑธ๋ฆฐ ๋ฌธ์ ,,
๋น์ทํ ์ ํ์ ๋ฌธ์ ๊ฐ ๋ง๋ค. ๋ฐฑ์ค 1208๋ฒ ๋ฌธ์ ๋ ๊ฐ์ ์ ํ์ด๋ฏ๋ก ์ ํ์ ๋ํ ์ค๋ช ์ ์๋ ๋งํฌ์์ ์ฐธ์กฐ
๐https://990427.tistory.com/48
์ฐ์ 1208๋ฒ๊ณผ ๊ฐ์ด ๋์ ๋๋ฆฌ๋ฅผ ์ฌ์ฉํด์ ๋ฌธ์ ๋ฅผ ํ์๋๋ ์๊ฐ์ด๊ณผ๊ฐ ๋ฌ๋ค.
์ด์ ๋ ์ ๋ง ๋ชจ๋ฅด๊ฒ ๋ค... ๋์ ๋๋ฆฌ์ ์๊ฐ๋ณต์ก๋๊ฐ O(1)์ด๊ธด ํ์ง๋ง ์จ์ด์๋ ์์๊ฐ ๋งค์ฐ ํฌ๋ค๊ณ ํ๋ค.
์คํจํ์ง๋ง ์ค๋ฅ๋ ์๋ค๊ณ ์๊ฐํ๋ ์ฝ๋
import sys
from collections import defaultdict
n=int(sys.stdin.readline())
A,B,C,D=[],[],[],[]
for i in range(n):
a,b,c,d=map(int, sys.stdin.readline().split())
A.append(a)
B.append(b)
C.append(c)
D.append(d)
ab=defaultdict(int)
cd=defaultdict(int)
for i in range(n):
for j in range(n):
ab[A[i]+B[j]]+=1
cd[C[i]+D[j]]+=1
res=0
for i in ab.keys():
if cd[-i]:
res+=(ab[i]*cd[-i])
print(res)
์ด์จ๋ ์ ์ฝ๋๋ก ๋ฐฑ์ค์์๋ ์๊ฐ์ด๊ณผ๊ฐ ๊ณ์ํด์ ๋๊ธฐ ๋๋ฌธ์ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ ์ฐพ์์ผ ํ๋ค.
Python3์ผ๋ก๋ ํต๊ณผํ ์ฌ๋์ด ์๊ณ Pypy3๋ก ํต๊ณผํ ์ฌ๋๋ค์ ์ฝ๋๋ฅผ ๋ณด์๋ค.
๋์ ๋๋ฆฌ๋ฅผ ์ฌ์ฉํ์ง ์๊ณ while๋ฌธ์ผ๋ก two-pointer๋ฅผ ์ฌ์ฉํ์๋ค.
1208๋ฒ์ ์ค๋ณต๋๋ ๋ถ๋ถ์ ๋ํ ๊ฒ์ฌ๊ฐ ๊ท์ฐฎ์์ ๋์ ๋๋ฆฌ๋ฅผ ์ฌ์ฉํ์๋๋ฐ ๊ฒฐ๊ตญ ๊ท์ฐฎ์ ๊ตฌํ์ ํ๊ฒ ๋์๋ค...
๊ฐ์ ํ ํต๊ณผํ ์ฝ๋
import sys
n=int(sys.stdin.readline())
A,B,C,D=[],[],[],[]
for i in range(n):
a,b,c,d=map(int, sys.stdin.readline().split())
A.append(a)
B.append(b)
C.append(c)
D.append(d)
ab=[]
cd=[]
for i in range(n):
for j in range(n):
ab.append(A[i]+B[j])
cd.append(C[i]+D[j])
ab.sort()
cd.sort()
res=0
l=0
r=len(cd)-1
while l<len(ab) and r>=0:
if ab[l]+cd[r]>0:
r-=1
elif ab[l]+cd[r]<0:
l+=1
else:
a=1
b=1
while l<len(ab)-1 and ab[l+1]==ab[l]:
l+=1
a+=1
while r>0 and cd[r-1]==cd[r]:
r-=1
b+=1
res+=(a*b)
l+=1
r-=1
print(res)
๋ฐฐ์ด์์ ๊ฐ์ ์ซ์๊ฐ ๋ช๊ฐ์ธ์ง while๋ฌธ์ ํตํด ๊ฒ์ฌํ ํ ๊ฒฐ๊ณผ๋ฅผ ์ถ๊ฐํด์ฃผ๋ ๋ฐฉ์์ด๋ค.
.
.
.
.
.
'๐ Algorithm > Python' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Python] ํ๋ก๊ทธ๋๋จธ์ค ์งํ ์ด๋ (0) | 2021.03.11 |
---|---|
[Python] ํ๋ก๊ทธ๋๋จธ์ค ํฉ์น ํ์ ์๊ธ (0) | 2021.03.11 |
[Python] ๋ฐฑ์ค 1208 (0) | 2021.03.08 |
[Python] ๋ฐฑ์ค 1167, 1967 (0) | 2021.03.08 |
[Python] ๋ฐฑ์ค 10917 (0) | 2021.03.07 |