SWEA (SW Expert Academy)/D2
[SWEA/D2] 1979 어디에 단어가 들어갈 수 있을까
hellosonic
2023. 4. 21. 18:33
문제 바로가기
SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
나의 코드 및 설명 01
- 두 번째로 풀이한 소스이다. 이게 더 깔끔하고 좋은 것 같다.
t = int(input())
for test_case in range(1, t+1):
n, k = map(int, input().split()) #퍼즐 가로 세로 : n 단어 길이 : k
board = []
for _ in range(n):
board.append(list(map(int, input().split())))
garo_zip = []
sero_zip = []
for i in range(n):
garo_count = 0
sero_count = 0
for j in range(n):
#가로 분석
if board[i][j] == 1: #좌표의 값이 1이면
garo_count += 1 #가로 카운트 1 증가
elif board[i][j] == 0: #좌표의 값이 0이면
garo_zip.append(garo_count) #현재까지 저장된 가로 카운트 garo_zip에 저장
garo_count = 0 #가로 카운트 0으로 초기화
#세로 분석
if board[j][i] == 1: #좌표의 값이 1이면
sero_count += 1 #세로 카운트 1 증가
elif board[j][i] == 0: #좌표의 값이 0이면
sero_zip.append(sero_count) #현재까지 저장된 세로 카운트 sero_zip에 저장
sero_count = 0 #세로 카운트 0으로 초기화
garo_zip.append(garo_count) #가로 한 줄 for문을 다 돌면 현재 가로 카운트 garo_zip에 저장
sero_zip.append(sero_count) #세로 한 줄 for문을 다 돌면 현재 세로 카운트 seor_zip에 저장
print("#{} {}".format(test_case, garo_zip.count(k) + sero_zip.count(k)))
나의 코드 및 설명 02
- 첫 번째로 풀이한 소스이다. visited 리스트에 연속된 1의 개수를 저장받고, k가 넘어갈 시에는 다시 1을 저장하는 방법으로 풀이하였다.
t = int(input())
for test_case in range(1, t+1):
n, k = map(int, input().split())
board = []
for _ in range(n):
board.append(list(map(int, input().split())))
garo_visited = [[0] * n for _ in range(n)]
for i in range(n):
garo_check = 1
for j in range(n):
if board[i][j] == 1:
if garo_check > k:
garo_check = 1
garo_visited[i][j-1] -= 1
continue
else:
garo_visited[i][j] = garo_check
garo_check += 1
if board[i][j] == 0:
garo_check = 1
sero_visited = [[0] * n for _ in range(n)]
for i in range(n):
sero_check = 1
for j in range(n):
if board[j][i] == 1:
if sero_check > k:
sero_check = 1
sero_visited[j-1][i] -= 1
continue
else:
sero_visited[j][i] = sero_check
sero_check += 1
if board[j][i] == 0:
sero_check = 1
ans = 0
for i in range(n):
ans += garo_visited[i].count(k)
for i in range(n):
ans += sero_visited[i].count(k)
print("#{} {}".format(test_case, ans))
피드백
첫 번째로 풀이했을 때는 어찌하다가 맞은 것 같다. 두 번째로 풀이할 때 좀 헤맸는데, 고민 끝에 작성한 두 번째 소스 코드가 더 만족스럽다.