Algorithm/Implementation

[백준 1388번] 바닥 장식

킹우현 2024. 3. 4. 20:44

 

1388번: 바닥 장식

형택이는 건축가이다. 지금 막 형택이는 형택이의 남자 친구 기훈이의 집을 막 완성시켰다. 형택이는 기훈이 방의 바닥 장식을 디자인했고, 이제 몇 개의 나무 판자가 필요한지 궁금해졌다. 나

www.acmicpc.net

n, m = map(int,input().split())

area = [list(input()) for _ in range(n)] # 바닥

visited = [[False]*m for _ in range(n)] # 방문(카운팅)여부

answer = 0

for i in range(n):
    for j in range(m): # 모든 나무의 영역을 방문

        if visited[i][j]: # 이미 방문(카운팅)한 나무라면 Pass
            continue

        visited[i][j] = True # 방문(카운팅)처리
        answer += 1 # 카운트 + 1

        if area[i][j] == '-': # 가로 모양의 나무라면 옆으로 이어진 나무를 모두 방문(카운팅)처리
            current_y = j+1
            while (current_y < m and area[i][current_y] == '-'):
                visited[i][current_y] = True
                current_y += 1

        elif area[i][j] == '|': # 세로 모양의 나무라면 아래로 이어진 나무를 모두 방문(카운팅)처리
            current_x = i+1
            while (current_x < n and area[current_x][j] == '|'):
                visited[current_x][j] = True
                current_x += 1

print(answer)

 

 

이번 문제는 '-' 와 'ㅣ' 모양의 나무로만 이루어진 영역에서 같은 방향으로 이어진 나무가 하나의 나무 판자라고 간주했을 때, 모든 영역에서 필요한 나무의 총 개수를 구하는 문제이다.

 

모든 영역을 순회하면서 나무를 카운팅해주는 방식으로 풀었는데, '-' 모양의 나무는 가로 방향으로 이어진 나무가 있는지 체크하고 'ㅣ' 모양의 나무는 세로 방향으로 이어진 나무가 있는지 체크해주었다.

 

이미 방문(카운팅)한 나무임을 확인하기 위해서 visited 라는 2차원 배열을 선언하고 하나의 나무로 이어진 영역을 방문(카운팅) 처리해주었다 :)

 

 

'Algorithm > Implementation' 카테고리의 다른 글

[백준 23289번] 온풍기 안녕!  (0) 2024.04.13
[백준 20058번] 마법사 상어와 파이어스톰  (0) 2024.04.07
[백준 14719번] 빗물  (0) 2024.01.15
[백준 20291번] 파일 정리  (0) 2024.01.06
[백준 16918번] 봄버맨  (1) 2024.01.04