본문 바로가기

알고리즘_파이썬

백준 1652 누울 자리를 찾아라

 

https://www.acmicpc.net/problem/1652

 

1652번: 누울 자리를 찾아라

첫째 줄에 방의 크기 N이 주어진다. N은 1이상 100이하의 정수이다. 그 다음 N줄에 걸쳐 N개의 문자가 들어오는데 '.'은 아무것도 없는 곳을 의미하고, 'X'는 짐이 있는 곳을 의미한다.

www.acmicpc.net

누울 때 무조건 몸을 쭈욱 뻗는다는 말의 표현 때문에 헷갈렸지만 한마디로 몸이 가로나 세로로 계속 늘어나는 경우를 생각하면 된다

가로의 경우 다음과 같이 되어서 5가지의 자리 수가 나오게 된다

그럼 알고리즘의 경우는 간단해진다

먼저 N이라는 방의 크기, '.'과 'X'를 입력을 받은 뒤 가로의 경우 행을 하나씩 탐색을 하면서 자리의 길이 len_row를 '.'를 만날때마다 

더한다. 만약 'X'를 만나면 len_row를 0으로 초기화하고 만약 len_row의 길이가 2이상이 된다면 눕는 것이 가능하므로 가로 결과에 1씩 더한다. 세로의 경우도 논리는 같지만 열을 하나씩 탐색하는 차이만 있다. 이를 코드로 나타내면 다음과 같다

N = int(input())
room = [list(input().rstrip()) for _ in range(N)]
result = [0,0]
for i in range(N):
  len_row, len_col = 0,0
  for j in range(N):
    #가로의 길이부터 확인
    if room[i][j] == '.':
      len_row +=1
    else:
      len_row = 0
    if len_row == 2:
      result[0] += 1

    if room [j][i] =='.':
      len_col +=1
    else:
      len_col = 0
    if len_col == 2:
      result[1] += 1
print(*result)

이때, len_row와 len_col을 첫번째 for문 안에서 0으로 초기화하는 것을 주의하자, 새로운 열이나 행의 탐색을 시작할때 지난 행이나 열의 길이가 포함이 되면 안된다. 처음에 생각없이 코드를 짜다가 애먹은 부분이다.

'알고리즘_파이썬' 카테고리의 다른 글

백준 9012 괄호 VPS  (0) 2024.01.13
백준 1181 단어정렬  (1) 2024.01.13
백준 1110 더하기 사이클  (0) 2024.01.13
백준 11399 ATM  (0) 2024.01.09
백준2667  (0) 2023.12.30