Bibbidi Bobbidi Boo

* 알고리즘 너무 약해서 기초 문제 50개 목표로 푸는 중...

* 3시간 안에 답을 내지 못하면 답지를 보고 30분 내로 정답 판정을 받고, 3일 뒤 다시 풀어보기


Greedy

8 / 50

 

탐색

8 / 50(NEW!)

 

기초 동적 프로그래밍

6 / 50


투포인터

2 / 10

 

이분탐색

0 / 10


문제

https://www.acmicpc.net/problem/2667

 

2667번: 단지번호붙이기

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

www.acmicpc.net

→ solved.ac 기준 실버 1


문제 해결 아이디어

예전에 알고리즘 책에서 봤던 DFS 예제 문제인 음료수 얼려 먹기 문제와 비슷

→ 다만 추가적으로 연결된 공간에서 수를 알아야 함.

→ color를 추가해서, 방문할 때 칠해주자.


구현

내 풀이

import sys

input = sys.stdin.readline

def dfs(x, y, color):

  if x <= -1 or x >= n or y <= -1 or y >= n:
    return False

  if graph[x][y] == 1:
    graph[x][y] = color
    dfs(x - 1, y, color)
    dfs(x, y - 1, color)
    dfs(x + 1, y, color)
    dfs(x, y + 1, color)
    return True
  return False

n = int(input())
graph = [list(map(int, list(input().rstrip()))) for _ in range(n)]

result = 0

for i in range(n):
  for j in range(n):
    if dfs(i, j, result + 2) == True:
      result += 1

print(result)
answer = [0 for i in range(result)]
for i in range(2, result + 2):
  for j in range(n):
    answer[i - 2] += graph[j].count(i)

answer.sort()
for a in answer:
  print(a)

메모

  • 걸린 시간: 22분

profile

Bibbidi Bobbidi Boo

@비비디

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!