[백준]갤러리(python/파이썬)

석준·2022년 11월 1일
0

백준_문제풀이

목록 보기
29/30
post-thumbnail

🕛문제

🕐문제 풀이

n, m = map(int, input().split())
gallery = [list(input()) for _ in range(n)]

answer = 0
'''
사진을 탐색하는 함수 상하좌우로 4번 실행됨
obj1, obj2: X 또는 .
n, m: 갤러리의 행&열, 반대로 들어오는 경우에 갤러리를 세로로 탐색함
x, y: 탐색할 때, 방향에 따라 현재 위치에서 행 또는 열을 더해서 두칸을 한번에 탐색하도록 하는 매개변수
'''
n, m = map(int, input().split())
gallery = [list(input()) for _ in range(n)]

answer = 0


def pic(obj1, obj2, n, m, x, y):
    global answer
    # 갤러리를 탐색할 r, c 변수를 하나의 변수로 할당
    rc = [0, 0]
    
    # rc의 x번 값을 0부터 n-2번 까지 돈다
    # x: 0, y: 1일 경우에 사진 행방향으로 탐색
    # x: 1, y: 0일 경우에 사진을 열방향으로 탐색
    for rc[x] in range(n-1):
       # 한칸은 벽, 한칸은 복도인 칸의 개수
       cnt = 0
       
       # rc의 y번 값을 0부터 끝까지 돈다
       for rc[y] in range(m):
           '''
           행 따라 탐색하는 경우 행 번호를 +1 해줘야 가로로 탐색을 하니 y: 1, x: 0
           열 따라 탐색하는 경우 열 번호를 +1 해줘야 세로로 탐색을 하니 x: 1, y: 0
           '''
           # gallery[r][c]위치와 gallery[r+y][c+x]가 ['X', '.'] 또는 ['.', 'X']라면
           # 사진을 걸 수 있는 조건과 같으니 cnt + 1
           if gallery[rc[0]][rc[1]] == obj1 and gallery[rc[0]+y][rc[1]+x] == obj2:
               cnt += 1
               
           # 사진을 걸 수 없는 조건이면
           # 여태까지 탐색한 공간의 //2를 answer에 더함
           # 홀수인 경우 //2 하면 소수점 아래는 버려짐
           # cnt 0으로 초기화
           else:
                answer += cnt // 2
                cnt = 0

# [벽, 복도], [복도, 벽] 탐색
# 위 조건이 사진을 걸 수 있는 조건
for obj1, obj2 in [['X', '.'], ['.', 'X']]:
    # n, m과 x, y를 치환하며 함수 실행
    
    # 행 따라 탐색
    pic(obj1, obj2, n, m, 0, 1)
    
    # 열따라 탐색
    pic(obj1, obj2, m, n, 1, 0)

print(answer)

😎새로운 아이디어나 개선할 점은 항상 환영입니다!

profile
파이썬 서버 개발자 지망생

0개의 댓글