๐Ÿ˜Ž ๊ณต๋ถ€ํ•˜๋Š” ์ง•์ง•์•ŒํŒŒ์นด๋Š” ์ฒ˜์Œ์ด์ง€?

[BAEKJOON python] 14890_ ๊ฒฝ์‚ฌ๋กœ ๋ณธ๋ฌธ

๐Ÿฆฅ ์ฝ”ํ…Œ/BAEKJOON

[BAEKJOON python] 14890_ ๊ฒฝ์‚ฌ๋กœ

์ง•์ง•์•ŒํŒŒ์นด 2022. 10. 12. 16:13
728x90
๋ฐ˜์‘ํ˜•
ํฌ๊ธฐ๊ฐ€ N×N์ธ ์ง€๋„๊ฐ€ ์žˆ๋‹ค. ์ง€๋„์˜ ๊ฐ ์นธ์—๋Š” ๊ทธ ๊ณณ์˜ ๋†’์ด๊ฐ€ ์ ํ˜€์ ธ ์žˆ๋‹ค.
์˜ค๋Š˜์€ ์ด ์ง€๋„์—์„œ ์ง€๋‚˜๊ฐˆ ์ˆ˜ ์žˆ๋Š” ๊ธธ์ด ๋ช‡ ๊ฐœ ์žˆ๋Š”์ง€ ์•Œ์•„๋ณด๋ ค๊ณ  ํ•œ๋‹ค.
    ๊ธธ์ด๋ž€ ํ•œ ํ–‰ ๋˜๋Š” ํ•œ ์—ด ์ „๋ถ€๋ฅผ ๋‚˜ํƒ€๋‚ด๋ฉฐ, ํ•œ์ชฝ ๋์—์„œ ๋‹ค๋ฅธ์ชฝ ๋๊นŒ์ง€ ์ง€๋‚˜๊ฐ€๋Š” ๊ฒƒ

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

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

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

์ง€๋„๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ์ง€๋‚˜๊ฐˆ ์ˆ˜ ์žˆ๋Š” ๊ธธ์˜ ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑ
์ฒซ์งธ ์ค„์— N (2 ≤ N ≤ 100)๊ณผ L (1 ≤ L ≤ N)์ด ์ฃผ์–ด์ง„๋‹ค.
๋‘˜์งธ ์ค„๋ถ€ํ„ฐ N๊ฐœ์˜ ์ค„์— ์ง€๋„๊ฐ€ ์ฃผ์–ด์ง„๋‹ค.
    ๊ฐ ์นธ์˜ ๋†’์ด๋Š” 10๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ž์—ฐ์ˆ˜์ด๋‹ค.
์ฒซ์งธ ์ค„์— ์ง€๋‚˜๊ฐˆ ์ˆ˜ ์žˆ๋Š” ๊ธธ์˜ ๊ฐœ์ˆ˜๋ฅผ ์ถœ๋ ฅ
# ๋ฐฐ์—ด ๊ธธ์ด, ๊ฒฝ์‚ฌ๋กœ ๊ธธ์ด
N, L = map(int, input().split())
graph = []
for i in range(N) :
    graph.append(list(map(int, input().split())))
case = []   # ์ง€๋‚  ์ˆ˜ ์žˆ๋Š” ๊ธธ์˜ ๊ฒฝ์šฐ๋“ค
count = 0   # ๊ฐ€๋Šฅํ•œ ๊ธธ

def check(l) :
    pre = l.pop()   # ์ด์ „ ๋•… ๋†’์ด
    extra = [pre]   # ๊ฒฝ์‚ฌ๋กœ ๋†“์„ ์ˆ˜ ์žˆ๋Š” ์—ฌ๋ถ„ ๋•…

    while l :       # ๋‹ค์Œ ๋•…์ด ๋‚จ์•„ ์žˆ๋‹ค๋ฉด
        next = l.pop()

        if pre == next :     # ์ด์ „ ๋•…๊ณผ ๋†’์ด ๊ฐ™์Œ.
            extra.append(next)
        elif pre == next - 1 :  # ํ˜„์žฌ๊ฐ€ ์ด์ „๋ณด๋‹ค ํ•œ์นธ ๋†’์Œ
            # ๊ฒฝ์‚ฌ๋กœ ๊ธธ์ด๋งŒํผ ์ด์ „ ๋•…์ด ๊ฐœ์ˆ˜๊ฐ€ ์žˆ์–ด์•ผ๋จ
            for k in range(L) :
                if len(extra) < L :     # ์ ๋‹ค๋ฉด xx
                    return False
            extra.clear()           # ์ด์ „๋•… ์ด์ œ ๋ถˆ๊ฐ€
            extra.append(next)      # ๋‹ค์Œ๋•… ๋„ฃ๊ธฐ
        elif pre == next + 1 :  # ํ˜„์žฌ๊ฐ€ ์ด์ „๋ณด๋‹ค ํ•œ์นธ ๋‚ฎ์Œ
            for k in range(L - 1) :
                if not l or l.pop() != next :   # ๊ฒฝ์‚ฌ๋„ ๊ธธ์ด๋ณด๋‹ค ์ ๊ณ , ๋ชจ๋‘ ๋†’์ด๊ฐ€ ๋‹ค๋ฅด๋‹ค๋ฉด
                    return False
            extra.clear()
        else :
            return False
        pre = next
    return True    

for i in range(N) :
    cardi = []     # ์—ด
    for j in range(N) :
        cardi.append(graph[j][i])
    case.append(graph[i][:])        # ํ–‰
    case.append(cardi[:])
# ํ–‰์—ด, ํ–‰์—ด, ํ–‰์—ด~~~~
# print(case)

# ๊ฒฝ์‚ฌ๋กœ ์ด์šฉํ•ด์„œ ๊ฐ€๋Šฅํ•œ์ง€~ ํ™•์ธ
for i in case :
    if check(i) :
        count += 1

print(count)

# input
# 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

# output
# 7
728x90
๋ฐ˜์‘ํ˜•
Comments