๋šœ๋ถ€๋‹ˆ์˜ Devlog

[BOJ] 17140.์ด์ฐจ์›๋ฐฐ์—ด๊ณผ ์—ฐ์‚ฐ (Python)

by ๋šœ๋ถ€๋‹ˆ

 

 

17140๋ฒˆ: ์ด์ฐจ์› ๋ฐฐ์—ด๊ณผ ์—ฐ์‚ฐ

์ฒซ์งธ ์ค„์— r, c, k๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. (1 ≤ r, c, k ≤ 100) ๋‘˜์งธ ์ค„๋ถ€ํ„ฐ 3๊ฐœ์˜ ์ค„์— ๋ฐฐ์—ด A์— ๋“ค์–ด์žˆ๋Š” ์ˆ˜๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๋ฐฐ์—ด A์— ๋“ค์–ด์žˆ๋Š” ์ˆ˜๋Š” 100๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ž์—ฐ์ˆ˜์ด๋‹ค.

www.acmicpc.net

 

ํ•ด๋‹น ๋ฌธ์ œ๋Š” 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๊ฐœ๋ฅผ ์ œ์™ธํ•œ ๋‚˜๋จธ์ง€๋Š” ๋ฒ„๋ฆฝ๋‹ˆ๋‹ค.

 

์ €๋Š” ์ด ๋ฌธ์ œ๋ฅผ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ํ’€์—ˆ์Šต๋‹ˆ๋‹ค.

  1. R ์—ฐ์‚ฐ์„ ๊ธฐ์ค€์œผ๋กœ ์—ฐ์‚ฐ ํ•จ์ˆ˜๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.
  2. R ์—ฐ์‚ฐ์˜ ๊ฒฝ์šฐ, ์—ฐ์‚ฐ ํ•จ์ˆ˜๋ฅผ ๊ทธ๋Œ€๋กœ ์‹คํ–‰ํ•œ๋‹ค.
    C ์—ฐ์‚ฐ์˜ ๊ฒฝ์šฐ, ๋ฐฐ์—ด์„ ์ „์น˜์‹œ์ผœ ์—ฐ์‚ฐ ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•˜๋ฉฐ ์ˆ˜ํ–‰ ํ›„ ๋‹ค์‹œ ๋ฐฐ์—ด์„ ์ „์น˜์‹œ์ผœ์ค€๋‹ค.
  3. A[r-1][c-1] == k ์ธ ๊ฒฝ์šฐ ์‹œ๊ฐ„์„ ์ถœ๋ ฅํ•œ๋‹ค.
  4. 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

๋šœ๋ถ€๋‹ˆ

ํ™œ๋™ํ•˜๊ธฐ