๋ฌธ์
https://www.acmicpc.net/problem/13314
๋ฐฑ์ค ๋ฌธ์ ์ง - 0x1C๊ฐ - ํ๋ก์ด๋ ์๊ณ ๋ฆฌ์ฆ
์๊ณ ๋ฆฌ์ฆ: ๊ทธ๋ํ ์ด๋ก , ํด ๊ตฌ์ฑํ๊ธฐ, ์ต๋จ ๊ฒฝ๋ก, ํ๋ก์ด๋-์์
ํ์ด

์ฒ์ ์ ํ๋ ์ ํ์ด๋ผ ๊ต์ฅํ ๋นํฉ์ค๋ฌ์ ๋ ๋ฌธ์ ... ๋ค๋ฅธ ํ์ด + GPT๋ฅผ ์ฐธ๊ณ ํด์ ํ์๋ค.
๊ฒฐ๋ก ๋ถํฐ ๋งํ์๋ฉด 9700๊ฐ ์ด์์ ์ฐจ์ด๊ฐ ๋ฐ์ํ๋ "๋ฐ์ดํฐ"๋ฅผ ์ฐพ์์ผ ํ๋ ๋ฌธ์ ๋ค.
์ผ๋จ ์ง๊ตฌ์ด์จ์ ์ฝ๋๋ ํ์ผ๋ก ์ฒจ๋ถ๋์ด ์๋๋ฐ, ์ดํด๋ณด๋ฉด ์๋์ ๊ฐ๋ค.
# ์กฐ๊ฑด
if( i == j && D[i][j] != 0 || D[i][j] > 10000) WRONG;
# ์ฒซ๋ฒ์งธ ์ฝ๋
for(int k = 1; k < N; k++){
for(int i = 1; i <= N; i++){
for(int j = 1; j <= N; j++){
D[i][j] = min(D[i][k] + D[k][j], D[i][j]);
}
}
}
# ๋๋ฒ์งธ ์ฝ๋๋ ๋ง์
์ค๊ฐ ๊ฑฐ์ ๋
ธ๋ k์ ๋ฒ์๋ฅผ 1 ~ N์ผ๋ก ์ค์ ํด์ผ ํ๋๋ฐ, N-1๊น์ง๋ง ํ์ธํ๋ค.
์ฆ D[i][N] + D[N][j]์ ๊ฒฝ์ฐ๋ฅผ ์์ ์ฒดํฌํ์ง ์์๊ฒ.
์ด ๋ฐ์ดํฐ๋ฅผ ๊ธฐ์ค์ผ๋ก T/F๊ฐ ๋๋๋ ค๋ฉด ์ด๋ป๊ฒ ํด์ผํ ๊น?
๐ D[i][j]๊ฐ์ด ์ค์ ๋ก๋ D[i][N] + D[N][i]์ฌ์ผ ๋ง๋ ํ์ด๋ผ๋๊ฒ.
๋ฐ๋ผ์ ๋ฐ์ดํฐ๊ฐ ํ๋ฆฌ๋ ค๋ฉด D[i][N] + D[N][i]๊ฐ D[i][j]๋ณด๋ค ์์์ผ ํ๋ค.
๋ฐ๋๋ก ๋ง๋ ๋ฐ์ดํฐ๋ค์ ๋ ๊ฐ์ง ๊ฒฝ์ฐ๊ฐ ์๊ฒ ๋ค.
D[i][i]: ์ฃผ๋๊ฐ์ (0์ด์ด์ผ ํจ)D[i][N],D[N][i]: ๊ฑฐ์ณ๊ฐ์ง ์๊ณ ์ง์ ์ฐ๊ฒฐ- ์ง์ ์ฐ๊ฒฐ๋ ๊ฐ์ ์ด๋ฏ๋ก ํ๋ก์ด๋ ์์ ์ด ์ด๋ป๊ฒ ๋์๊ฐ๋ ํญ์ ๊ฐ์.
์ ์กฐ๊ฑด์ ๋ถํฉํ๋ ๋ฐ์ดํฐ์ ๊ฐฏ์๋ฅผ cnt๋ผ๊ณ ๊ฐ์ ํด๋ณด์.
ํ๋ฆฐ ๋ฐ์ดํฐ์ ๊ฐฏ์๊ฐ 9700๊ฐ ์ด์์ด์ด์ผ ํ๋ค๊ณ ํ์ผ๋ N*N - cnt >= 9700 ์ ๋ง์กฑํ๋ฉด ๋ ๊ฒ์ด๋ค.
๊ณ์ฐ ๋๋ ค๋ณด๋ฉด N = 100์ผ๋ 1๋ฒ ์กฐ๊ฑด์ ๊ฐฏ์๋ 100, 2๋ฒ ์กฐ๊ฑด์ ๊ฐฏ์๋ 99 * 2 = 198(D[i][99], D[99][j]์ ๊ฐ์ด ์ถ๋ฐ/๋์ฐฉ๋
ธ๋๊ฐ 99๊ฐ ์๋๊ฒฝ์ฐ)๊ฐ ๋์จ๋ค.
100 * 100 = 10000, 100 + 189 = 298์ด๋๊น 10000 - 298 = 9702๊ฐ๊ฐ ๋๋ฏ๋ก ๋ฌธ์ ์ ์กฐ๊ฑด์ ๋ง์กฑํ๋ค.
๊ณ ๋ก ํ๋ฆฐ ๋ฐ์ดํฐ๊ฐ 9700๊ฐ ์ด์์ด ๋์ค๋ ์ฝ๋๋,
- 100 * 100 ํ๋ ฌ
D[i][99]=D[99][j]= 1i=i์ธ ์ฃผ๋๊ฐ์ ์ ๊ฐ์ 0
์ด ๋์ด์ผ ํ๋ค.
์ด๋ ๊ฒ ํ๋ฉด
- ์ฒซ๋ฒ์งธ ์ฝ๋:
D[i][j]= 100 - ๋๋ฒ์งธ ์ฝ๋:
D[i][j]=D[i][99]+D[99][j]= 2
๊ฐ ๋๋ฏ๋ก ์ฐจ์ด๊ฐ ์๊ธฐ๊ฒ ๋๋ค.
์ ์ฒด ์ฝ๋
# 9700๊ฐ ์ด์์ ์ฐจ์ด๊ฐ ๋ฐ์ํ๋ "๋ฐ์ดํฐ"๋ฅผ ์ฐพ์์ผ ํ๋ ๋ฌธ์ ๋ค.
"""
100x100 ํ๋ ฌ๋ก ๋ง๋ค ์ ์๋ ์์ ๊ฐฏ์ = 100 * 100 = 10,000๊ฐ
์ ๋๋ก ๊ณ์ฐํ ๊ฐ๊ณผ ํ๋ฆฐ ๊ณ์ฐ์ ๊ฐ์ด ๊ฐ์ ๊ฒฝ์ฐ๋ฅผ cnt๋ผ๊ณ ํ์๋,
- (i, i): ์ฃผ๋๊ฐ์ ํ๋ ฌ 100๊ฐ
- (i, k), (k, j): ์ถ๋ฐ์ง or ๋์ฐฉ์ง๊ฐ k์ธ๊ฒฝ์ฐ 99 * 2 = 198๊ฐ
10,000๊ฐ - 298๊ฐ = 9702๊ฐ๊ฐ ๋๋ฏ๋ก N = 100์ด๊ณ (i, k), (k, j)๊ฐ (i, j)๋ณด๋ค ์์ ๋ "๋ฐ์ดํฐ"๋ฅผ ๋ง์กฑํจ.
"""
# ๋ฉ๋ชจ๋ฆฌ: 32412KB / ์๊ฐ: 36ms
N = 100
arr = [[100] * N for _ in range(N)]
for i in range(100):
arr[i][99] = arr[99][i] = 1
arr[i][i] = 0
print(N)
for line in arr:
print(*line)
ํ๋ก์ด๋ ์์ ์ ์ดํดํ๋๊ฐ๋ฅผ ๊ฒ์ฆํ๋ ๋๋์ด๋ค.