https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWIeUtVakTMDFAVH
SW Expert Academy
SW ํ๋ก๊ทธ๋๋ฐ ์ญ๋ ๊ฐํ์ ๋์์ด ๋๋ ๋ค์ํ ํ์ต ์ปจํ ์ธ ๋ฅผ ํ์ธํ์ธ์!
swexpertacademy.com
#์๋ฆฌ์ฌ
T = int(input())
for tc in range(1,T+1):
N= int(input())
arr = [list(map(int,input().split())) for _ in range(N)]
answer = 999999999
#DFS๋ก ํ์ด์ผํ ๋ฏ..
#์๋ฆฌ 2๊ฐ๋๊น ์ฌ๋ฃ ๋๋๊ฒ. -๊ฐ์ ์์ฌ๋ฃ ์์ผ๋ ์๋ฅผ ๋น๊ต ํด์ผํจ!
#level==N
#DFS ์๋ฆฌA,์๋ฆฌB ๋๋ ์ ์ฌ๊ท (์์ฌ๋ฃ ์ธ๋ฑ์ค๋ฅผ ๋๋๋ ๊ณผ์ (?))
def cook(level,Acook,Bcook):
global answer
if level==N: #์์ฌ๋ฃ ์๋งํผ level์ด ๋๋ฉด return!
if len(Acook) == len(Bcook): #์์ฌ๋ฃ๋ ์ง์๋ก ๋ฐ๋ฐ์ด๋๊น ๊ฐ์๋!
A,B=0,0
for i in range(N//2):
for j in range(N//2):
A+=arr[Acook[i]][Acook[j]]
B+=arr[Bcook[j]][Bcook[i]]
if answer>abs(A-B):
answer = abs(A-B)
return
cook(level+1,Acook+[level],Bcook) #A์๋ฆฌ์ ๋ค์ด๊ฐ ์์ฌ๋ฃ ๋ฒํธ
cook(level+1,Acook,Bcook+[level]) #B์๋ฆฌ์ ๋ค์ด๊ฐ ์์ฌ๋ฃ ๋ฒํธ
cook(0,[],[]) #level,A์๋ฆฌ,B์๋ฆฌ
print(f'#{tc} {answer}')
ํ์ด ๊ณผ์
์ ์ DFS๋ฅผ ๊ณต๋ถํ์ ๋ 2๊ฐ์ง ๊ฐ์ง๋ก ๋๋๋ ๋ฐฉ๋ฒ์ ์์ฉํจ.
1. A์๋ฆฌ์ ๋ค์ด๊ฐ ์์ฌ๋ฃ์ ์ธ๋ฑ์ค์ B์๋ฆฌ์ ๋ค์ด๊ฐ ์์ฌ์ ์ธ๋ฑ์ค๋ฅผ ๋ด์ ์ค ๋ฆฌ์คํธ๋ฅผ ๋งค๊ฐ๋ณ์๋ก ์ง์ ํด DFS๋๋ฆฌ๊ธฐ
2. ์ข ๋ฃ ์กฐ๊ฑด์ ์์ฌ๋ฃ์ ์ ์ผ๋!
3. ๋ฌธ์ ์์ ์ง์์ ์์ฌ๋ฃ๋ฅผ ์ ๊ณตํ๊ณ ์๋ฆฌ์๋ ์ ๋ฐ์ฉ ๋ค์ด๊ฐ๋ค๊ณ ์กฐ๊ฑด์ด ์ฃผ์ด์ก์ผ๋ฏ๋ก if๋ฌธ์ ์กฐ๊ฑด์ ๋ฌ์์ค๊ฒ
4. for๋ฌธ์ ๋๋ ค์ ๊ฐ ์๋ฆฌ๋ณ๋ก ์์ฌ๋ฃ ๊ฐ ๋ํด์ฃผ๊ณ
5. abs๋ก ์ฐจ์ด ๊ตฌํด์ ์ต์๊ฐ์ ๋ต์ผ๋ก ๊ฐฑ์
'Problem Solving > SWEA' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
swea1865. ๋์ฒ ์ด์ ์ผ ๋ถ๋ฐฐ (0) | 2022.06.02 |
---|---|
swea14190. ๋ฏผ์ฝ์จ์ ๊ฝ๋ฐญ(python) (0) | 2022.04.11 |
swea2117.ํ ๋ฐฉ๋ฒ ์๋น์ค (0) | 2022.04.07 |
swea.14195 ๋ฏธ์๋ฌผ ๊ด์ฐฐ (0) | 2022.04.06 |
swea. ์ ๊ธฐ๋ฒ์ค (0) | 2022.03.06 |
๋๊ธ