본문 바로가기
Algorithm

[구현/문자열] 백준 1652 누울 자리를 찾아라 - Python

by jangThang 2022. 3. 9.
반응형

백준 온라인 저지

 

[ Contents ]

     

     

    1. 문제 (링크 참조)

     

    1652번: 누울 자리를 찾아라

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

    www.acmicpc.net

     

     

     

    2. 문제 풀이

     2칸 길이의 가로 혹은 세로로 누울 자리를 구하는 문제입니다. 다만 문제 설명이 조금 모호하게 되어있고, 예제도 1개 밖에 없어서 문제 이해가 가장 어렵습니다...

     

    1) 연속된 빈 칸(.)이 2개 이상 있어야 하고
    2) 벽의 끝 또는 짐(X)에 닿아야 합니다.

     

     2가지 조건을 모두 만족해야 자리 하나입니다. 따라서 .의 개수를 세다가 X 또는 벽을 만나면 자리 1개로 세시면 됩니다.

     

     

     

    3. 코드

    import sys
    input = sys.stdin.readline
    
    #입력
    N = int(input())
    room = [] #방 구조 저장
    row = 0 #가로
    col = 0 #세로
    for c in range(N):
        tmp = input().rstrip()
        cnt = 0 # .개수
        for i in tmp:
            if i == '.':
                cnt += 1
            #X를 만났을 때, 앞서 .이 2개 이상이었으면 자리 추가
            elif i == 'X':
                if cnt >= 2:
                    row += 1
                cnt = 0
        #..이상임에도 벽을 만나지 못한채 끝났으면 자리 추가
        if cnt >= 2:
            row += 1
        room.append(tmp)

     방의 구조를 한 줄씩 입력받으면서 가로 자리를 계산합니다.

     연속된 빈 칸(.)이 2개 이상이고, 짐(X)을 만나면 자리를 1개 추가합니다. 특히 마지막이 X으로 끝나지 않을 경우도 있으므로 끝에 빈 칸(.)이 2개 이상이면 자리를 1개 추가해줍니다.

     예를 들어 ...X...이면 자리는 2개입니다.

     

     

    #세로로 누울자리 찾기
    for i in range(N):
        cnt = 0 # .개수
        for j in range(N):
            if room[j][i] == '.':
                cnt += 1
            # X를 만났을 때, 앞서 .이 2개 이상이었으면 자리 추가
            elif room[j][i] == 'X':
                if cnt >= 2:
                    col += 1
                cnt = 0
        # ..이상임에도 벽을 만나지 못한채 끝났으면 자리 추가
        if cnt >= 2:
            col += 1
    #출력
    print(row, col)

     가로와 마찬가지로 세로도 계산해줍니다.

     

     

    star가 되고나서 Tistory

    반응형

    댓글