[BOJ][๐ŸŸก3][๋ฐฑ์ค€#14890] ๊ฒฝ์‚ฌ๋กœ

์ž‘์„ฑ:    

์—…๋ฐ์ดํŠธ:

์นดํ…Œ๊ณ ๋ฆฌ:

ํƒœ๊ทธ: , , ,

๋ฌธ์ œ ์ถœ์ฒ˜

BAEKJOON Online Judge #14890


๋ฌธ์ œ

ํฌ๊ธฐ๊ฐ€ Nร—N์ธ ์ง€๋„๊ฐ€ ์žˆ๋‹ค. ์ง€๋„์˜ ๊ฐ ์นธ์—๋Š” ๊ทธ ๊ณณ์˜ ๋†’์ด๊ฐ€ ์ ํ˜€์ ธ ์žˆ๋‹ค.ย  ์˜ค๋Š˜์€ ์ด ์ง€๋„์—์„œ ์ง€๋‚˜๊ฐˆ ์ˆ˜ ์žˆ๋Š” ๊ธธ์ด ๋ช‡ ๊ฐœ ์žˆ๋Š”์ง€ ์•Œ์•„๋ณด๋ ค๊ณ  ํ•œ๋‹ค. ๊ธธ์ด๋ž€ ํ•œ ํ–‰ ๋˜๋Š” ํ•œ ์—ด ์ „๋ถ€๋ฅผ ๋‚˜ํƒ€๋‚ด๋ฉฐ, ํ•œ์ชฝ ๋์—์„œ ๋‹ค๋ฅธ์ชฝ ๋๊นŒ์ง€ ์ง€๋‚˜๊ฐ€๋Š” ๊ฒƒ์ด๋‹ค.ย  ๋‹ค์Œ๊ณผ ๊ฐ™์€ N=6์ธ ๊ฒฝ์šฐ ์ง€๋„๋ฅผ ์‚ดํŽด๋ณด์ž.

์ด๋•Œ, ๊ธธ์€ ์ด 2N๊ฐœ๊ฐ€ ์žˆ์œผ๋ฉฐ, ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

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

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

์•„๋ž˜์™€ ๊ฐ™์€ ๊ฒฝ์šฐ์—๋Š” ๊ฒฝ์‚ฌ๋กœ๋ฅผ ๋†“์„ ์ˆ˜ ์—†๋‹ค.

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

L = 2์ธ ๊ฒฝ์šฐ์— ๊ฒฝ์‚ฌ๋กœ๋ฅผ ๋†“์„ ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ๋ฅผ ๊ทธ๋ฆผ์œผ๋กœ ๋‚˜ํƒ€๋‚ด๋ฉด ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

๊ฒฝ์‚ฌ๋กœ๋ฅผ ๋†“์„ ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

์œ„์˜ ๊ทธ๋ฆผ์˜ ๊ฐ€์žฅ ์™ผ์ชฝ๋ถ€ํ„ฐ 1๋ฒˆ, 2๋ฒˆ, 3๋ฒˆ, 4๋ฒˆ ์˜ˆ์ œ๋ผ๊ณ  ํ–ˆ์„ ๋•Œ, 1๋ฒˆ์€ ๋†’์ด ์ฐจ์ด๊ฐ€ 1์ด ์•„๋‹ˆ๋ผ์„œ, 2๋ฒˆ์€ ๊ฒฝ์‚ฌ๋กœ๋ฅผ ๋ฐ”๋‹ฅ๊ณผ ์ ‘ํ•˜๊ฒŒ ๋†“์ง€ ์•Š์•„์„œ, 3๋ฒˆ์€ ๊ฒน์ณ์„œ ๋†“์•„์„œ, 4๋ฒˆ์€ ๊ธฐ์šธ์ด๊ฒŒ ๋†“์•„์„œ ๋ถˆ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ์ด๋‹ค. ๊ฐ€์žฅ ์œ„์— ์ฃผ์–ด์ง„ ๊ทธ๋ฆผ ์˜ˆ์˜ ๊ฒฝ์šฐ์— ์ง€๋‚˜๊ฐˆ ์ˆ˜ ์žˆ๋Š” ๊ธธ์€ ํŒŒ๋ž€์ƒ‰์œผ๋กœ, ์ง€๋‚˜๊ฐˆ ์ˆ˜ ์—†๋Š” ๊ธธ์€ ๋นจ๊ฐ„์ƒ‰์œผ๋กœ ํ‘œ์‹œ๋˜์–ด ์žˆ์œผ๋ฉฐ, ์•„๋ž˜์™€ ๊ฐ™๋‹ค. ๊ฒฝ์‚ฌ๋กœ์˜ ๊ธธ์ด L = 2์ด๋‹ค.

์ง€๋„๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ์ง€๋‚˜๊ฐˆ ์ˆ˜ ์žˆ๋Š” ๊ธธ์˜ ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.


์ž…๋ ฅ

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


์ถœ๋ ฅ

์ฒซ์งธย ์ค„์— ์ง€๋‚˜๊ฐˆ ์ˆ˜ ์žˆ๋Š” ๊ธธ์˜ ๊ฐœ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.


์˜ˆ์ œ

์˜ˆ์ œ 1

์ž…๋ ฅ

6 2
3 3 3 3 3 3
2 3 3 3 3 3
2 2 2 3 2 3
1 1 1 2 2 2
1 1 1 3 3 1
1 1 2 3 3 2


์ถœ๋ ฅ

3


์˜ˆ์ œ 2

์ž…๋ ฅ

6 2
3 2 1 1 2 3
3 2 2 1 2 3
3 2 2 2 3 3
3 3 3 3 3 3
3 3 3 3 2 2
3 3 3 3 2 2


์ถœ๋ ฅ

7


์˜ˆ์ œ 3

์ž…๋ ฅ

6 3
3 2 1 1 2 3
3 2 2 1 2 3
3 2 2 2 3 3
3 3 3 3 3 3
3 3 3 3 2 2
3 3 3 3 2 2


์ถœ๋ ฅ

3


์˜ˆ์ œ 4

์ž…๋ ฅ

6 1
3 2 1 1 2 3
3 2 2 1 2 3
3 2 2 2 3 3
3 3 3 3 3 3
3 3 3 3 2 2
3 3 3 3 2 2


์ถœ๋ ฅ

11


My Sol

def main(arr):
    global N, L
    check = [0]*N
    std = arr[0]

    def check_float(part):
        global N, L
        std = part[0]
        for p in part:
            if p != std: return 0
        return 1

    i = 1
    while i < N:
        # ๋†’์ด์ฐจ๊ฐ€ 1 ์ดˆ๊ณผ
        if abs(arr[i]-std) > 1: return 0
        # ๋†’์ด๊ฐ€ ๊ฐ™์Œ
        elif arr[i]==std: i+=1
        # ๋†’์ด๊ฐ€ 1 ์ž‘์•„์ง
        elif arr[i]+1 == std:
            if i+L > N: return 0
            if not check_float(arr[i:i+L]): return 0
            for k in range(i, i+L):
                check[k] = 1
            i += L
            std -= 1

        # ๋†’์ด๊ฐ€ 1 ๋†’์•„์ง
        elif arr[i]-1 == std:
            if i-L < 0: return 0
            # 1. ๋’ค์˜ ๊ฒฝ์‚ฌ๋กœ ๊ตฌ๊ฐ„์ด ๋ชจ๋‘ ํ‰ํ‰ํ•œ์ง€ ์ฒดํฌ
            if not check_float(arr[i-L:i]): return 0
            # 2. ๋’ค์— ๊ฒฝ์‚ฌ๋กœ๊ฐ€ ์—†์—ˆ๋Š”์ง€ ์ฒดํฌ
            for k in range(i-L, i):
                if check[k]: return 0
            for k in range(i-L, i):
                check[k] = 1
            i += 1
            std += 1

    return 1


N, L = map(int, input().split())
mat = [list(map(int, input().split())) for _ in range(N)]
ans = 0
for i in range(N):
    road = mat[i]
    ans += main(road)

for j in range(N):
    road = []
    for i in range(N):
        road.append(mat[i][j])
    ans += main(road)

print(ans)

๊ตฌํ˜„ ๋ฌธ์ œ์˜€๋‹ค.

  1. NxN์˜ 2์ฐจ์› ๋ฐฐ์—ด์—์„œ ํ•œ ํ–‰๊ณผ ์—ด์„ ๊ธฐ์ค€์œผ๋กœ ์กฐํšŒํ•˜๊ธฐ ๋•Œ๋ฌธ์— 1์ฐจ์› ๋ฐฐ์—ด์— ๋…๋ฆฝ์ ์ด๋‹ค. ๋•Œ๋ฌธ์— ๊ฐ ํ–‰๊ณผ ์—ด์„ arr๋กœ ํ•จ์ˆ˜์— ์ธ์ž๋กœ ์ „๋‹ฌํ•˜์—ฌ ํŒ๋ณ„ํ•˜๋Š” main ํ•จ์ˆ˜๋ฅผ ๋‘์—ˆ๋‹ค.
  2. mainํ•จ์ˆ˜๋Š” ๊ฐ€๋Šฅํ•˜๋‹ค๋ฉด 1, ์•ˆ ๋œ๋‹ค๋ฉด 0์„ ๋ฐ˜ํ™˜ํ•˜๊ณ , ์ „์—ญ ๋ฐ˜๋ณต์—์„œ๋Š” ans์— ์ด๋ฅผ ๋ฐ˜ํ™˜๊ฐ’์„ ๋”ํ•ด ์ถœ๋ ฅํ•œ๋‹ค.
  3. main ํ•จ์ˆ˜์˜ ๋‚ด๋ถ€๋Š” ๊ฒฝ์‚ฌ๋กœ์˜ ์กด์žฌ ์œ ๋ฌด๋ฅผ ํ™•์ธํ•˜๋Š” check 1์ฐจ์› ๋ฐฐ์—ด์„ ๋”ฐ๋กœ ๋‘”๋‹ค.
  4. ์‹œ์ž‘์ ์ธ arr[0]์„ std๋กœ ๋‘๊ณ , ์ดํ›„ arr์˜ ํ•œ ์นธ์”ฉ ์ธ๋ฑ์Šค๋ฅผ ๋†’์ด๋ฉฐ ์ง„ํ–‰ํ•œ๋‹ค.
  5. ๊ฒฝ์šฐ 1. ๊ฒฝ์‚ฌ๋กœ๊ฐ€ ๋†’์•„์ง€๊ฑฐ๋‚˜ ๋‚ฎ์•„์ง€๋Š”๋ฐ ๋ณ€ํ™”๊ฐ€ 1 ์ดˆ๊ณผ์ธ ๊ฒฝ์šฐ๋ฅผ ๋จผ์ € ๋”ฐ์ง„๋‹ค. ์ด ๊ฒฝ์šฐ ๋”ฐ์งˆ ๊ฒƒ๋„ ์—†์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋ฏ€๋กœ 0์„ return ํ•œ๋‹ค.
  6. ๊ฒฝ์šฐ 2. ๋งŒ์•ฝ ๋†’์ด๊ฐ€ ๊ฐ™๋‹ค๋ฉด ๋”ฐ์งˆ ๊ฒƒ๋„ ์—†์ด ๋‹ค์Œ ์ธ๋ฑ์Šค๋กœ ๋„˜์–ด๊ฐ„๋‹ค.
  7. ๊ฒฝ์šฐ 3. ๋†’์ด๊ฐ€ ๋‚ฎ์•„์ง„๋‹ค๋ฉด ์•ž์œผ๋กœ ๊ฒฝ์‚ฌ๋กœ๋ฅผ ๋‘์–ด์•ผ ํ•˜๋ฏ€๋กœ ์•ž์˜ ๊ฒฝ์‚ฌ๋กœ๋ฅผ ๋‘๋Š” ๊ตฌ๊ฐ„์ด ํ‰ํ‰ํ•œ์ง€ ์ฒดํฌํ•œ๋‹ค. ์ด๋ฅผ check_float ํ•จ์ˆ˜๋ฅผ ๋”ฐ๋กœ ๋‘์–ด ๊ตฌ๊ฐ„์„ ์ธ์ž๋กœ ์ „๋‹ฌํ•˜๊ณ  ๋…๋ฆฝ์ ์œผ๋กœ ์ฒดํฌํ•œ๋‹ค. ์ด์ œ ์ƒ๊ฐํ•ด๋ณด๋‹ˆ set์œผ๋กœ ๋‘๊ณ  ๊ธธ์ด๊ฐ€ 1 ์ด์ƒ์ธ์ง€ ์•„๋‹Œ์ง€๋งŒ ์ฒดํฌํ•˜๋ฉด ๋  ๊ฒƒ ๊ฐ™๋‹ค.
  8. ํ‰ํ‰ํ•˜์ง€ ์•Š๋‹ค๋ฉด ๋ถˆ๊ฐ€๋Šฅ์ด๋ฏ€๋กœ 0์„ ๋ฐ˜ํ™˜ํ•˜๊ณ , ํ‰ํ‰ํ•˜๋‹ค๋ฉด(part๊ฐ€ ๋ชจ๋‘ ๊ฐ™์€ ๊ฐ’) ํ•ด๋‹น ๊ฒฝ์‚ฌ๋กœ ๊ตฌ๊ฐ„์˜ ์ธ๋ฑ์Šค๋งŒํผ check์— 1์„ ์ฒดํฌํ•œ๋‹ค. ํ–ฅํ›„ ๋†’์ด๊ฐ€ ํ•œ ์นธ ๋†’์•„์ ธ์„œ ๊ฒฝ์‚ฌ๋กœ๋ฅผ ์ด์ „์œผ๋กœ ๋‘์–ด์•ผ ํ•  ๋•Œ, check ๋ฐฐ์—ด์„ ํ™•์ธํ•˜์—ฌ ๊ฒฝ์‚ฌ๋กœ๊ฐ€ ์ด๋ฏธ ๋‘์–ด์ ธ์žˆ๋Š” ๊ณต๊ฐ„์ด ์•„๋‹Œ์ง€ ์ฒดํฌํ•œ๋‹ค.
  9. ๊ฒฝ์‚ฌ๋กœ๋ฅผ L๋งŒํผ ๋‘์—ˆ์œผ๋ฏ€๋กœ ์ธ๋ฑ์Šค๋ฅผ L๋งŒํผ ์ถ”๊ฐ€ํ•˜๊ณ  std๋ฅผ 1 ๋‚ฎ์ถฐ์ค€๋‹ค.
  10. ๊ฒฝ์šฐ 4. ๋†’์ด๊ฐ€ ํ•œ ์นธ ๋†’์•„์ง„๋‹ค๋ฉด ์ด๋ฏธ ์˜จ ๋ฐฉํ–ฅ์œผ๋กœ ๊ฒฝ์‚ฌ๋กœ๋ฅผ ๋‘์–ด์•ผ ํ•˜๋ฏ€๋กœ 1) ๋’ค์˜ ๊ฒฝ์‚ฌ๋กœ๋ฅผ ๋‘๋Š” ๊ตฌ๊ฐ„์ด ํ‰ํ‰ํ•œ์ง€ ์ฒดํฌํ•˜๊ณ , 2) ๊ฒฝ์‚ฌ๋กœ๊ฐ€ ์ด๋ฏธ ์žˆ์ง€๋Š” ์•Š๋Š”์ง€ ์ฒดํฌํ•˜๋Š” 2์ค‘ ์ฒดํฌ๊ฐ€ ํ•„์š”ํ•˜๋‹ค.
  11. ์ด ์ค‘ ํ•˜๋‚˜๋ผ๋„ ๋งŒ์กฑํ•˜์ง€ ๋ชปํ•œ๋‹ค๋ฉด 0์„ ๋ฐ˜ํ™˜, ์•„๋‹ˆ๋ผ๋ฉด ๊ตฌ๊ฐ„๋งŒํผ check์— ์ฒดํฌ๋ฅผ ํ•ด์ฃผ๊ณ , std๋ฅผ 1 ๋†’์—ฌ์ค€ ๋’ค, ๋‹ค์Œ ์ธ๋ฑ์Šค๋กœ ๋„˜์–ด๊ฐ„๋‹ค.


๊ฒฐ๊ณผ

๋งž์•˜์Šต๋‹ˆ๋‹ค!!


๋ชจ๋ฒ”๋‹ต์•ˆ

์ถœ์ฒ˜

# empty

๋Œ“๊ธ€๋‚จ๊ธฐ๊ธฐ