SW Expert Academy

[SWEA] 어디에 단어가 들어갈 수 있을까 (1979) Python

RiLLa_0511 2023. 5. 8. 02:00
728x90

https://swexpertacademy.com/main/code/problem/problemDetail.do?problemLevel=2&contestProbId=AV5PuPq6AaQDFAUq&categoryId=AV5PuPq6AaQDFAUq&categoryType=CODE&problemTitle=&orderBy=INQUERY_COUNT&selectCodeLang=PYTHON&select-1=2&pageSize=10&pageIndex=1 

 

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

 

 

< 틀린 코드 >

 

n = 5, k = 3 일때,

1 1 1 0 1 인 경우에 result에 1이 더해지지 않는 코드이다.

 

출력값 (기본입력에 대한)

#1 1
#2 5
#3 4
#4 0
#5 3
#6 1
#7 11
#8 0
#9 7
#10 3

t = int(input())

for test_case in range(1, t+1):
    n, k = map(int, input().split())
    lst = []
    result = 0
    for _ in range(n):
        a = list(map(int, input().split()))
        lst.append(a)

    for j in range(n):
        rt = 0
        for e in range(n):
            if lst[j][e] == 1:
                rt += 1
                if e != n - 1 and lst[j][e+1] != 1 and rt != k:
                    rt = 0
        if rt == k:
            result += 1

    for d in range(n):
        rt = 0
        for s in range(n):
            if lst[s][d] == 1:
                rt += 1
                if s != n - 1 and lst[s + 1][d] != 1 and rt != k:
                    rt = 0
        if rt == k:
            result += 1

    print("#{} {}".format(test_case, result))

< 어디가 틀린지 모르겠는 코드 >

 

아직 어느 부분이 잘 못 된 건지 모르겠다.

 

출력값 (기본입력에 대한)

#1 1
#2 5
#3 5
#4 0
#5 21
#6 1
#7 23
#8 0
#9 60
#10 4

t = int(input())

for test_case in range(1, t+1):
    n, k = map(int, input().split())
    lst = []
    result = 0
    for _ in range(n):
        a = list(map(int, input().split()))
        lst.append(a)

    for j in range(n):
        rt = 0
        for e in range(n):
            if lst[j][e] == 1:
                rt += 1
            else:
                if rt == k:
                    result += 1
                else:
                    rt = 0

    for d in range(n):
        rt = 0
        for s in range(n):
            if lst[s][d] == 1:
                rt += 1
            else:
                if rt == k:
                    result += 1
                else:
                    rt = 0

    print("#{} {}".format(test_case, result))

 

< 정답 코드 >

 

처음엔 if e == n - 1 or lst[j][e + 1] == 0: 를 쓰지 않아서 연속되는 1의 수가 k를 초과하여도 result에 1을 더해주어 다른 결과가 출력되었는데 해결하였다!

 

t = int(input())

for test_case in range(1, t+1):
    n, k = map(int, input().split())
    lst = []
    result = 0
    for _ in range(n):
        a = list(map(int, input().split()))
        lst.append(a)

    for j in range(n):
        rt = 0
        for e in range(n):
            if lst[j][e] == 1:
                rt += 1
                if rt == k:
                    if e == n - 1 or lst[j][e + 1] == 0:
                        result += 1
            else:
                rt = 0

    for d in range(n):
        rt = 0
        for s in range(n):
            if lst[s][d] == 1:
                rt += 1
                if rt == k:
                    if s == n - 1 or lst[s + 1][d] == 0:
                        result += 1
            else:
                rt = 0

    print("#{} {}".format(test_case, result))

 

 

 

 

 

혼자 공부하며 올리는 블로그입니다. 틀린 내용은 댓글 남겨주시면 감사하겠습니다.