huginn muninn

[백준] 1388 바닥 장식 - 파이썬 본문

코딩테스트

[백준] 1388 바닥 장식 - 파이썬

_maddy 2023. 7. 27. 21:32

 

 

1388번: 바닥 장식

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

www.acmicpc.net

 

이번에도 그래프 문제, 

저번에 풀었던 유기농 배추하고 매우 비슷한데, 오히려 더 쉬워서 빨리 풀었다. 

 

6 9
-||--||--
--||--||-
|--||--||
||--||--|
-||--||--
--||--||-

세로, 가로 길이를 입력하고 바닥에 타일을 설치하는 건데

- 모양이 연속으로 있으면 하나의 타일로 생각하고, | 모양이 연속으로 있으면 하나의 타일로 생각한다. 

그래서 이 문제는 - 이 모양은 좌우만 확인하고, | 모양은 상하만 확인하면 되어서 더 쉽다. 

 

N,M=map(int,input().split())   #세로, 가로 
floor=[]  #바닥 그래프
count=0

def dfs(x,y):
    xy=[-1,1]
    
    #좌우로만 확인하면 됨
    if floor[x][y]=='-':
        #확인했다는 표시
        floor[x][y]=0
        for i in xy:
            dy=y+i
            if (0<=dy<M) and floor[x][dy]=='-':
                dfs(x,dy)

    #상하로만 확인하면 됨. 
    if floor[x][y]=='|':
        floor[x][y]=0
        for j in xy:
            dx=x+j
            if (0<=dx<N) and floor[dx][y]=='|':
                dfs(dx,y)

        

#타일 입력
for _ in range(N):
    floor.append(list(input()))

#타일 개수 확인
for i in range(N):
    for j in range(M):
        if floor[i][j]=='-' or floor[i][j]=='|':
            dfs(i,j)
            count+=1

print(count)