[백준 1652] 누울 자리를 찾아라 - 파이썬

2022. 11. 3. 15:29알고리즘

문제

일 년 동안 세계일주를 하던 영식이는 여행을 하다 너무 피곤해서 근처에 있는 코레스코 콘도에서 하룻밤 잠을 자기로 하고 방을 잡았다.

코레스코 콘도에 있는 방은 NxN의 정사각형모양으로 생겼다. 방 안에는 옮길 수 없는 짐들이 이것저것 많이 있어서 영식이의 누울 자리를 차지하고 있었다. 영식이는 이 열악한 환경에서 누울 수 있는 자리를 찾아야 한다. 영식이가 누울 수 있는 자리에는 조건이 있다. 똑바로 연속해서 2칸 이상의 빈 칸이 존재하면 그 곳에 몸을 양 옆으로 쭉 뻗으면서 누울 수 있다. 가로로 누울 수도 있고 세로로 누울 수도 있다. 누울 때는 무조건 몸을 쭉 뻗기 때문에 반드시 벽이나 짐에 닿게 된다. (중간에 어정쩡하게 눕는 경우가 없다.)

만약 방의 구조가 위의 그림처럼 생겼다면, 가로로 누울 수 있는 자리는 5개이고, 세로로 누울 수 있는 자리는 4개 이다. 방의 크기 N과 방의 구조가 주어졌을 때, 가로로 누울 수 있는 자리와 세로로 누울 수 있는 자리의 수를 구하는 프로그램을 작성하시오.

입력

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

입력 예시

5
....X
..XX.
.....
.XX..
X....

 

출력

첫째 줄에 가로로 누울 수 있는 자리와 세로로 누울 수 있는 자리의 개수를 출력한다.

출력 예시

5 4

 

 초기 코드

n = int(input())
lie = []
for i in range(n):
    lie.append(input())

garo = 0
sero = 0
for x in lie:
    if ".." in x:
        garo += 1

newlie = []
for i in range(n):
    change = ""
    for j in range(n):
        change += lie[j][i]
    newlie.append(change)
    
for x in newlie:
    if ".." in x:
        sero += 1
print(garo, sero)

의식의 흐름

입력은 문자열을 리스트에 저장하는 식으로 받았다.

세로로 누울 수 있는 자리를 찾을 때는 [가로 <=> 세로]로 세로 문자열들을 가로처럼 리스트에 저장했다.

문제를 처음에 잘못 이해했는데,

누울 수 있는 자리가 있다면 -> 누울 수 있는 자리 수는 무조건 1개로 이해해서,

".."(누울 수 있는 최소조건자리)가 있으면 카운트를 하나씩 해주는 식으로 코드를 짰다.

하지만 ..X..의 경우 누울 수 있는 자리는 2개이므로, 코드를 수정해야 했다.

최종 코드

n = int(input())
lie = []
for i in range(n):
    lie.append(input())

garo = 0
sero = 0
for x in lie:
    k = x.split('X')
    for m in k:
        if '..' in m:
            garo += 1
            
newlie = []
for i in range(n):
    change = ""
    for j in range(n):
        change += lie[j][i]
    newlie.append(change)
    
for x in newlie:
    k = x.split('X')
    for m in k:
        if '..' in m:
            sero += 1    
            
print(garo, sero)

의식의 흐름

..X..의 경우 누울 수 있는 자리가 2개가 나와야 하고, ....X의 경우는 1개가 나와야 하는데, 이걸 어떻게 할까 고민하다가

split을 사용하기로 했다. X를 기준으로 split을 하여 저장하고, split된 각 원소들에 ..이 포함되어 있으면 누울 수 있는 자리 카운트를 1씩 올려줬다. 정답!

'알고리즘' 카테고리의 다른 글

[백준 2747] 피보나치 수  (0) 2022.11.29
[백준 10815] 숫자 카드  (0) 2022.10.14