본문 바로가기
Problem Solving/Baekjoon(BOJ)

[ BOJ ] 1652 누울 자리를 찾아라 - python 문제풀이

by IM조이 2021. 7. 19.

1652 누울 자리를 찾아라

접근 : 가로, 세로 배열을 따로 만들고, 각 배열을 넘겨서 개수 세기. '.' 이면 카운트를 늘려가다가 'X'가 나오면 카운트가 2 이상이면 전체 개수에 +1 해주고 안되면 그냥 카운트 0으로 초기화. 주의할 점은 for문을 다 돌고 나왔을 때도 다시 한번 초기화 해주는 작업을 해줘야 한다는 것 (X가 나오지 않았을 경우를 생각해서)

풀이방법
1. 인풋으로 받은 배열(가로 버전)을 세로 버전으로 더 만들기
2. 행 기준으로 순회하면서 '.' 개수 세고 'X'나오는 순간 누울 수 있을 만큼 카운트 쌓였는지(2) 확인 후 초기화
3. 만약 행을 빠져나왔다면 다시 한번 카운트 확인해주고 초기화 하는 작업

코드 중복으로 쓰기 싫어서 두 배열을 따로 만들었지만, 굳이 세로 버전을 다시 만들 필요 없이 행이랑 열 위치만 바꿔서 확인해도 된다.

 

def find(li):
    cnt = 0
    for i in range(n):
        tmp = 0
        for j in range(n):
            if li[i][j] == 'X':
                if tmp >= 2:
                    cnt += 1
                tmp = 0
            else:
                tmp += 1
        if tmp >=2: #마지막 원소까지 지나왔다면
            cnt += 1
    return cnt
n = int(input())
r1 = [list(input()) for _ in range(n)]
r2 = [[r1[i][j] for i in range(n)] for j in range(n)]
print(find(r1),find(r2))

댓글