GitHub

https://github.com/Choidongjun0830

파이썬 알고리즘 문제 풀이

Baekjoon Online Judge 2667번 파이썬

gogi masidda 2022. 8. 8. 17:44

문제 링크
https://www.acmicpc.net/problem/2667

 

2667번: 단지번호붙이기

<그림 1>과 같이 정사각형 모양의 지도가 있다. 1은 집이 있는 곳을, 0은 집이 없는 곳을 나타낸다. 철수는 이 지도를 가지고 연결된 집의 모임인 단지를 정의하고, 단지에 번호를 붙이려 한다. 여

www.acmicpc.net

파이썬 델타 값 이용하기
dx = [0,0,-1,1]
dy = [-1,1,0,0]

for i in range(4):
pointX = x + dx[i]
pointY = y + dy[i]
=>  i = 0
pointX = x , pointY = y - 1 : 왼쪽 노드
i = 1
pointX = x , pointY = y + 1 : 오른쪽 노드
i = 2
pointX = x - 1 , pointY = y : 위쪽 노드
i = 3
pointX = x + 1, pointY = y : 아래쪽 노드


정답 코드

import sys

dx = [0,0,-1,1]
dy = [-1,1,0,0]

def dfs(x,y):
  global count
  visited[x][y] = True
  if mapping[x][y] == 1:
    count += 1
    for i in range(4):
      pointX = x + dx[i]
      pointY = y + dy[i]
      if 0<= pointX < N and 0<= pointY < N:
        if visited[pointX][pointY] == False and mapping[pointX][pointY] == 1:
          dfs(pointX,pointY)

N = int(sys.stdin.readline())

mapping = []
for i in range(N):
  mapping.append(list(map(int,sys.stdin.readline().rstrip())))

result = []
count = 0
visited = [[False]*N for i in range(N)]
for i in range(N):
  for j in range(N):
    if mapping[i][j] == 1 and visited[i][j] == False:
      dfs(i,j)
      result.append(count)
      count = 0

result.sort()
print(len(result))
for i in range(len(result)):
  print(result[i])


그래프 너무 어렵다..

728x90