[BOJ] 17140.์ด์ฐจ์๋ฐฐ์ด๊ณผ ์ฐ์ฐ (Python)
by ๋๋ถ๋
ํด๋น ๋ฌธ์ ๋ rํ c์ด์ ๊ฐ์ด k๊ฐ ๋๊ธฐ ์ํ ์ฐ์ฐ ์ต์ ์๊ฐ์ ์ถ๋ ฅํ๋ ๋ฌธ์ ์ ๋๋ค.
์ฒ์์ ํฌ๊ธฐ๊ฐ 3x3์ธ ๋ฐฐ์ด A๊ฐ ์ฃผ์ด์ง๋ฉฐ, 1์ด๋ง๋ค ๋ค์ ๋ฐฐ์ด ์ฐ์ฐ์ด ์ ์ฉ๋ฉ๋๋ค.
- R ์ฐ์ฐ : ํ์ ๊ฐ์ >= ์ด์ ๊ฐ์์ธ ๊ฒฝ์ฐ, ๋ชจ๋ ํ์ ๋ํด ์ ๋ ฌ ์ํ
- C ์ฐ์ฐ : ํ์ ๊ฐ์ < ์ด์ ๊ฐ์์ธ ๊ฒฝ์ฐ, ๋ชจ๋ ์ด์ ๋ํด ์ ๋ ฌ ์ํ
์ ๋ ฌ์ ํ ๋๋ ์ซ์์ ๊ฐ์, ์ซ์ ์์๋ก ํฉ๋๋ค.
์๋ฅผ ๋ค์ด, ์ฒ์์ ์ฃผ์ด์ง ๋ฐฐ์ด์ด [3, 1, 1] ์ผ ๋ 3์ด 1๊ฐ, 1์ด 2๊ฐ ์ด๋ฏ๋ก ์ฐ์ฐ ์ํ ํ [3, 1, 1, 2] ๊ฐ ๋ฉ๋๋ค.
์ด ๋ฐฐ์ด์ ํ ๋ฒ ๋ ์ฐ์ฐ ์ํ์ ํ๋ฉด, 3์ด 1๊ฐ, 1์ด 2๊ฐ, 2๊ฐ 1๊ฐ ์ด๋ฏ๋ก [2, 1, 3, 1, 1, 2] ๊ฐ ๋ฉ๋๋ค.
์ด๋ฐ ์์ผ๋ก ์ฐ์ฐ์ ์ํํ๋ฉฐ rํ๊ณผ c์ด์ด k์ผ ๋ ์๊ฐ์ ์ถ๋ ฅํ๋ฉด ๋๋๋ฐ,
์ค์ ๋ก๋ A[r-1][c-1]์ด k์ผ ๋ ์๊ฐ์ ์ถ๋ ฅํ๋ฉด ๋ฉ๋๋ค. ๊ทธ๋ฌ๋ 100์ด๊ฐ ๋์ด๊ฐ๋ฉด -1์ ์ถ๋ ฅํฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ rํ๊ณผ c์ด์ ๊ธธ์ด๋ 100์ ๋์ด๊ฐ ์ ์์ผ๋ฉฐ, 100์ด ๋๋ ๊ฒฝ์ฐ ์ฒ์ 100๊ฐ๋ฅผ ์ ์ธํ ๋๋จธ์ง๋ ๋ฒ๋ฆฝ๋๋ค.
์ ๋ ์ด ๋ฌธ์ ๋ฅผ ๋ค์๊ณผ ๊ฐ์ ๋ฐฉ์์ผ๋ก ํ์์ต๋๋ค.
- R ์ฐ์ฐ์ ๊ธฐ์ค์ผ๋ก ์ฐ์ฐ ํจ์๋ฅผ ์์ฑํ๋ค.
- R ์ฐ์ฐ์ ๊ฒฝ์ฐ, ์ฐ์ฐ ํจ์๋ฅผ ๊ทธ๋๋ก ์คํํ๋ค.
C ์ฐ์ฐ์ ๊ฒฝ์ฐ, ๋ฐฐ์ด์ ์ ์น์์ผ ์ฐ์ฐ ํจ์๋ฅผ ์คํํ๋ฉฐ ์ํ ํ ๋ค์ ๋ฐฐ์ด์ ์ ์น์์ผ์ค๋ค. - A[r-1][c-1] == k ์ธ ๊ฒฝ์ฐ ์๊ฐ์ ์ถ๋ ฅํ๋ค.
- 100์ด๊ฐ ์ง๋๋ rํ c์ด์ด k๊ฐ ๋์ง ์์ผ๋ฉด -1์ ์ถ๋ ฅํ๋ค.
# ์ด์ฐจ์ ๋ฐฐ์ด๊ณผ ์ฐ์ฐ
import sys
# ์ฐ์ฐํจ์
# A : NxN ๋ฐฐ์ด, L : ํ์ ๊ธธ์ด (์นผ๋ผ ๊ฐ์)
def operation(A, L) :
for idx, row in enumerate(A) :
temp = []
for n in set(row) : # ํ์ ์ค๋ณต์ ์ ๊ฑฐํ ํ
if n : # 0์ด ์๋ ์ซ์๋ฉด
temp.append((n, row.count(n))) # ํด๋น ์ซ์์ ๋ํ ๊ฐ์ ์ธ์ด์ค
temp = sorted(temp, key = lambda x : (x[1], x[0])) # ๊ฐ์, ์ซ์ ์์๋ก ์ ๋ ฌ
templen = len(temp)
if templen > 50 : templen = 50 # ์ซ์์ ๊ฐ์๋ 100์ ๋์ด๊ฐ๋ฉด ์๋จ
L = max(L, templen * 2) # ํ์ ๊ธธ์ด๋ฅผ ์ต๋๋ก ๋ฐ๊ฟ์ค
A[idx] = [] # A์ idxํ ์ด๊ธฐํ
for i in range(templen) : # A์ idxํ ์ฌ๊ตฌ์ฑ
A[idx].append(temp[i][0])
A[idx].append(temp[i][1])
# ์ต๋ ๊ธธ์ด๋งํผ 0 ์ฑ์ฐ๊ธฐ
for idx, row in enumerate(A) :
for _ in range(L-len(row)) :
A[idx].append(0)
return A, L
if __name__=='__main__' :
r, c, k = map(int, input().split())
A = [list(map(int, input().split())) for _ in range(3)]
rlen, clen = 3, 3
for time in range(101) :
if r <= rlen and c <= clen and A[r-1][c-1] == k :
print(time)
break
if rlen >= clen : # R์ฐ์ฐ
A, clen = operation(A, clen)
else : # C์ฐ์ฐ
A, rlen = operation(list(zip(*A)), rlen) # ํ๊ณผ ์ด์ ์ ์น์์ผ ํจ์๋ฅผ ์คํํ๋ค.
A = list(zip(*A)) # ํ๊ณผ ์ด์ ์์ํ๋ก ๋ฐ๊พผ๋ค.
else : # 100์ด ๋์ rํ c์ด์ด k๊ฐ ์๋ ๊ฒฝ์ฐ
print(-1)
'Algorithm > BOJ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ] 17406.๋ฐฐ์ด๋๋ฆฌ๊ธฐ4 (0) | 2021.04.22 |
---|---|
[BOJ] 15686.์นํจ๋ฐฐ๋ฌ (Python) (0) | 2021.04.22 |
[BOJ] 14890.๊ฒฝ์ฌ๋ก (Python) (0) | 2021.04.20 |
[BOJ] 1929.์์๊ตฌํ๊ธฐ (Python) (0) | 2021.04.19 |
[BOJ] 12110.2048(Easy) (0) | 2021.04.19 |
๋ธ๋ก๊ทธ์ ์ ๋ณด
๋๋ถ๋์ Devlog
๋๋ถ๋