문제
N X N 크기의 판이 있다. 판의 각 칸에는 돌이 있거나 없을 수 있다. 돌이 가로, 세로, 대각선 중 하나의 방향으로 다섯 개 이상 연속한 부분이 있는지 없는지 판정하는 프로그램을 작성하라.
입력
첫 번째 줄에 테스트 케이스의 수 T가 주어진다.
각 테스트 케이스의 첫 번째 줄에는 하나의 정수 N(5 ≤ N ≤ 20)이 주어진다.
다음 N개의 줄의 각 줄에는 길이 N인 문자열이 주어진다. 각 문자는 ‘o’또는 ‘.’으로, ‘o’는 돌이 있는 칸을 의미하고, ‘.’는 돌이 없는 칸을 의미한다.
출력
각 테스트 케이스 마다 돌이 다섯 개 이상 연속한 부분이 있으면 “YES”를, 아니면 “NO”를 출력한다.
내가 쓴 코드1
T = int(input())
for t in range(T):
N = int(input())
omok = [input() for _ in range(N)]
result = 'NO'
flag = 0
# 가로 5개
for i in range(N):
cnt = 0
for j in range(N):
if omok[i][j] == 'o':
cnt += 1
if cnt == 5:
result = 'YES'
break
# 세로 5개
if result == 'NO':
for i in range(N):
cnt = 0
for j in range(N):
if omok[j][i] == 'o':
cnt += 1
if cnt == 5:
result = 'YES'
break
# 대각선 5개
# 1. 우하향
if result == 'NO':
for i in range(N - 4):
for j in range(N - 4):
if omok[i][j] == 'o':
if omok[i + 1][j + 1] == 'o' and omok[i + 2][j + 2] == 'o' and omok[i + 3][j + 3] == 'o' and \
omok[i + 4][j + 4] == 'o':
result = 'YES'
flag = 1
break
if flag == 1:
break
# 2. 우상향
if result == 'NO':
for i in range(N - 4):
for j in range(4, N):
if omok[i][j] == 'o':
if omok[i + 1][j - 1] == 'o' and omok[i + 2][j - 2] == 'o' and omok[i + 3][j - 3] == 'o' and \
omok[i + 4][j - 4] == 'o':
result = 'YES'
flag = 1
break
if flag == 1:
break
print(f'#{t + 1} {result}')
ㅎㅎㅎ 처음 썼던 코드인데, 제공된 테스트케이스는 다 맞는데, 제출하면 틀렸다고 뜬다... 그렇게 오목을 잊어가다가,,,
내가 쓴 코드2
# 하 우하 우 좌하
di = [1, 1, 0, 1]
dj = [0, 1, 1, -1]
T = int(input())
for t in range(T):
N = int(input())
arr = [list(input()) for _ in range(N)]
ans = 'NO'
for i in range(N):
for j in range(N):
if arr[i][j] == 'o':
for k in range(4):
cnt = 1
for l in range(1, 5):
ni = i + di[k]*l
nj = j + dj[k]*l
if not(0 <= ni < N and 0 <= nj < N):
break
if arr[ni][nj] == 'o':
cnt += 1
if cnt >= 5:
ans = 'YES'
break
if ans == 'YES':
break
if ans == 'YES':
break
print(f'#{t+1} {ans}')
어제 설명 한 번 듣고, 오늘도 듣게 됐다! ㅎㅎ 그리고 드디어 또 도전 ^^ !!! 오늘은 델타를 써서 풀어보았당 ~.~!
풀었는데 완전 누가 봐도 맞는 코든데 자꾸 하나씩 답이 틀리는거다... 그래서 강사님 동원해서 디버깅하고 난리쳤더니....
cnt를 마지막 for문 위에서 1을 할당해줘야 하는데, 그 바깥 for문에다가 한거다.. 그 위치 틀려서 계속 답이 안맞았던 것ㅎ
for문이 4개나 돼서 그냥 유관상으로는 찾기 힘든 실수였다.. 흐그극 ㅠㅠ
담주월요일에 시험인데 어떡하지,,, 이렇게 작은 실수가 더 찾기 힘들어ㅠ 차라리 그냥 큰 틀을 틀리면 싹다 고쳐버리기라도 하지,,,, 으어 걱정인형 됨....ㅜ.ㅜ
출력 결과
# 1 YES
# 2 YES
# 3 YES
# 4 NO
'Algorithm > Python' 카테고리의 다른 글
| [SWEA #11010] 배열2 - 대각 최대값 (1) | 2024.02.29 |
|---|---|
| [SWEA #11013] 배열1 - 3분할 (2) | 2024.02.29 |
| [SWEA #4408] 자기 방으로 돌아가기 (0) | 2024.02.29 |
| [SWEA #1860] 진기의 최고급 붕어빵 (3) | 2024.02.29 |
| [SWEA #11804] 탐욕 - 컨테이너 운반 (0) | 2024.02.28 |