문제
2차원 방의 정보가 주어진다. " . "은 누울 수 있는 칸이고 "X"은 누울 수 없는 칸이다.
가로와 세로를 탐색해서 " . "이 2칸 이상 존재할 때 누울 수 있는데 가로와 세로 각각 몇 개의 누울자리가 있는지 구하라
입력
첫째 줄에 방의 크기 N이 주어진다. N은 1이상 100이하의 정수이다. 그 다음 N줄에 걸쳐 N개의 문자가 들어오는데 '.'은 아무것도 없는 곳을 의미하고, 'X'는 짐이 있는 곳을 의미한다.
출력
첫째 줄에 가로로 누울 수 있는 자리와 세로로 누울 수 있는 자리의 개수를 출력한다.
접근
가로와 세로를 각각 탐색하여 "."의 개수를 카운트한다. 카운트를 하다가 "X"를 만났을 때 그 동안 "."의 개수가 몇 개인지 파악하여 2이상이면 최종해를 증가시켜준다.
구현
아래는 가로를 탐색하여 누울 자리를 찾는 것이다.
" . "을 만나면 cnt를 증가시킨다. 이때 "X"를 만나면 그 동안 cnt가 2이상이면 가로의 누울자리를 추가하고 cnt를 0으로 초기화한다. 한 줄의 가로를 탐색 후에도 cnt가 2이상이면 누울자리를 증가시킨다.
그리고 한 줄이 끝날 때마다 cnt를 0으로 초기화한다.
위 과정을 가로와 세로 두 번으로 나눠서 진행하였다.
row = 0
column = 0
for y in range(N):
cnt = 0
for x in range(N):
if matrix[y][x] == '.':
cnt += 1
elif matrix[y][x] == 'X':
if cnt >= 2:
row += 1
cnt = 0
if cnt >= 2:
row += 1
cnt = 0
전체 코드
import sys
input = sys.stdin.readline
N = int(input())
matrix = [list(map(str, input().strip())) for _ in range(N)]
row = 0
column = 0
for y in range(N):
cnt = 0
for x in range(N):
if matrix[y][x] == '.':
cnt += 1
elif matrix[y][x] == 'X':
if cnt >= 2:
row += 1
cnt = 0
if cnt >= 2:
row += 1
cnt = 0
for x in range(N):
cnt = 0
for y in range(N):
if matrix[y][x] == '.':
cnt += 1
elif matrix[y][x] == 'X':
if cnt >= 2:
column += 1
cnt = 0
if cnt >= 2:
column += 1
cnt = 0
print(row, column)
'알고리즘 풀이 > 백준' 카테고리의 다른 글
[백준 2579] 계단 오르기 (0) | 2021.02.17 |
---|---|
[백준 1149] RGB 거리 (0) | 2021.02.17 |
[백준 2839] 설탕 배달 (0) | 2021.02.17 |
[백준 1181] 단어 정렬 (0) | 2021.02.17 |
[백준 1764] 듣보잡 (0) | 2021.02.17 |