알고리즘 풀이/백준

[백준 1652] 누울 자리를 찾아라

iwannawebfullstack 2021. 2. 17. 14:37

문제

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