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

[BOJ] 14890.๊ฒฝ์‚ฌ๋กœ (Python)

by ๋šœ๋ถ€๋‹ˆ

 

 

14890๋ฒˆ: ๊ฒฝ์‚ฌ๋กœ

์ฒซ์งธ ์ค„์— N (2 ≤ N ≤ 100)๊ณผ L (1 ≤ L ≤ N)์ด ์ฃผ์–ด์ง„๋‹ค. ๋‘˜์งธ ์ค„๋ถ€ํ„ฐ N๊ฐœ์˜ ์ค„์— ์ง€๋„๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๊ฐ ์นธ์˜ ๋†’์ด๋Š” 10๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ž์—ฐ์ˆ˜์ด๋‹ค.

www.acmicpc.net

์ด ๋ฌธ์ œ๋Š” NxN ํฌ๊ธฐ์˜ ์ง€๋„์—์„œ ๊ฐˆ ์ˆ˜ ์žˆ๋Š” ๊ธธ์ด ๋ช‡ ๊ฐœ์ธ์ง€ ์ฐพ๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์„œ ๊ธธ์€ ํ•œ ํ–‰ ๋„๋Š” ํ•œ ์—ด์„ ์˜๋ฏธํ•˜๋ฉฐ, ๊ธธ์€ ์ด 2N๊ฐœ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.

์นธ์˜ ๋†’์ด๊ฐ€ ๊ฐ™์•„์•ผ ๊ธธ์„ ์ง€๋‚˜๊ฐˆ ์ˆ˜ ์žˆ๋Š”๋ฐ, ๋งŒ์•ฝ ๋†’์ด๊ฐ€ ๋‹ค๋ฅธ ๊ฒฝ์šฐ ๊ฒฝ์‚ฌ๋กœ๋ฅผ ์„ค์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ฒฝ์‚ฌ๋กœ ๋†’์ด๋Š” ํ•ญ์ƒ 1์ด๋ฉฐ, ๊ธธ์ด๋Š” L๋กœ ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค. ๊ฒฝ์‚ฌ๋กœ์˜ ๊ฐœ์ˆ˜๋Š” ๋งค์šฐ ๋งŽ์ด ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.

 

๊ฒฝ์‚ฌ๋กœ๋Š” ๋‚ฎ์€ ์นธ๊ณผ ๋†’์€ ์นธ์„ ์—ฐ๊ฒฐํ•˜๋Š” ๋ฐ, ์ด ๋•Œ ์•„๋ž˜ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • ๊ฒฝ์‚ฌ๋กœ๋Š” ๋‚ฎ์€ ์นธ์— ๋†“์œผ๋ฉฐ L๊ฐœ์˜ ์—ฐ์†๋œ ์นธ์— ๊ฒฝ์‚ฌ๋กœ ๋ฐ”๋‹ฅ์ด ๋ชจ๋‘ ์ ‘ํ•ด์•ผํ•œ๋‹ค.
  • ๋‚ฎ์€ ์นธ๊ณผ ๋†’์€ ์นธ์˜ ๋†’์ด ์ฐจ์ด๋Š” 1์ด์–ด์•ผ ํ•œ๋‹ค.
  • ๊ฒฝ์‚ฌ๋กœ๋ฅผ ๋†“์„ ๋‚ฎ์€ ์นธ์˜ ๋†’์ด๋Š” ๋ชจ๋‘ ๊ฐ™์•„์•ผ ํ•˜๊ณ , L๊ฐœ์˜ ์นธ์ด ์—ฐ์†๋˜์–ด ์žˆ์–ด์•ผ ํ•œ๋‹ค.
  • ๊ฒฝ์‚ฌ๋กœ๋ฅผ ๋†“์€ ๊ณณ์—๋Š” ๋˜ ๊ฒฝ์‚ฌ๋กœ๋ฅผ ๋†“์„ ์ˆ˜ ์—†๋‹ค.
  • ๊ฒฝ์‚ฌ๋กœ๋ฅผ ๋†“๋‹ค๊ฐ€ ๋ฒ”์œ„๊ฐ€ ๋ฒ—์–ด๋‚˜๋Š” ๊ฒฝ์šฐ, ๊ฒฝ์‚ฌ๋กœ๋ฅผ ๋†“๋Š” ๊ฒƒ์€ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.

๊ฒฝ์‚ฌ๋กœ๋ฅผ ๋†“๋Š” ์กฐ๊ฑด์— ๋งž์ถฐ์„œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ–ˆ์œผ๋ฉฐ, ์ด ๋•Œ ์ €๋Š” ํ•˜๋‚˜์˜ ๊ธธ์— ๋Œ€ํ•ด์„œ๋งŒ ๊ฒ€์‚ฌ๋ฅผ ํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ธธ ํ•˜๋‚˜๋ฅผ ๊ฒ€์‚ฌํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค๊ณ  ์—ฌ๊ธฐ์— ํ•œ ํ–‰ ๋˜๋Š” ํ•œ ์—ด์„ ๋„ฃ์–ด์„œ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค.

 

์ €์˜ ์ฝ”๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

# ๊ฒฝ์‚ฌ๋กœ
import sys

# ์ง€๋‚˜๊ฐˆ ์ˆ˜ ์žˆ๋Š” ๊ธธ์ธ์ง€ ํ™•์ธํ•˜๋Š” ํ•จ์ˆ˜
# N : ๊ธธ์˜ ๊ธธ์ด, L : ๊ฒฝ์‚ฌ๋กœ ๊ธธ์ด, route : ๊ธธ
def check_route(N, L, route) :
    ramp = [0]*N # ๊ฒฝ์‚ฌ๋กœ๋ฅผ ์„ธ์› ๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•œ ๋ฆฌ์ŠคํŠธ
    for i in range(N-1) :
        if route[i] != route[i+1] : # ๋†’์ด ์ฐจ์ด๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ
            if abs(route[i] - route[i+1]) > 1 : # ๋†’์ด ์ฐจ์ด๊ฐ€ 1์ด ์•„๋‹Œ ๊ฒฝ์šฐ
                return False
            else : # ๋†’์ด ์ฐจ์ด๊ฐ€ 1์ธ ๊ฒฝ์šฐ
                if route[i] - route[i+1] == 1 : # ๋†’์€ ์นธ์—์„œ ๋‚ฎ์€ ์นธ
                    if i+1+L > N : return False
                    check = route[i+1] # ๊ฒฝ์‚ฌ๋กœ๋ฅผ ์„ธ์šธ ์ˆ˜ ์žˆ๋Š” ๋†’์ด์ธ์ง€ ํ™•์ธ์šฉ
                    for j in range(i+1, i+1+L) :
                        if ramp[j] or route[j] != check : return False
                        ramp[j] = 1
                elif route[i] - route[i+1] == -1 : # ๋‚ฎ์€ ์นธ์—์„œ ๋†’์€ ์นธ
                    if i-L < -1 : return False
                    check = route[i]
                    for j in range(i, i-L, -1) :
                        if ramp[j] or route[j] != check : return False
                        ramp[j] = 1
    return True
                        
    

if __name__=="__main__" :
    input = sys.stdin.readline
    N, L = map(int, input().split())
    matrix = [list(map(int, input().split())) for _ in range(N)]

    cnt = 0 # ์ง€๋‚˜๊ฐˆ ์ˆ˜ ์žˆ๋Š” ๊ธธ์˜ ์ˆ˜ ๊ธฐ๋ก

    for r in matrix : # ํ–‰ ํ™•์ธ
        if check_route(N, L, r) : cnt += 1

    for c in range(N) : # ์—ด ํ™•์ธ
        if check_route(N, L, [matrix[r][c] for r in range(N)]) : cnt += 1
    
    print(cnt)
 

๋ธ”๋กœ๊ทธ์˜ ์ •๋ณด

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

๋šœ๋ถ€๋‹ˆ

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