Early Riser
생각정리
Early Riser
전체 방문자
오늘
어제
  • 분류 전체보기 (127)
    • JS (19)
    • React (33)
    • Web (2)
    • Library, Framework (14)
    • Algorithm (40)
    • Computer Science (3)
    • 회고 (3)
    • AI (13)

블로그 메뉴

  • 홈
  • 태그
  • 방명록
  • 글쓰기

공지사항

인기 글

태그

  • 부스트캠프 합격 후기
  • global minima
  • 손실함수
  • 백준
  • 구현
  • useEffect
  • useState
  • 완전탐색
  • RNN
  • 부스트캠프 합격
  • js
  • LGBM
  • 비동기
  • 밑바닥
  • 자바스크립트
  • 부스트캠프 9기
  • lightgbm
  • 논문리뷰
  • boosting
  • 백트래킹
  • 프로그래머스
  • BFS
  • local minima
  • 오늘의불경
  • dfs
  • 딥러닝
  • react
  • javascript
  • 파이썬
  • 알고리즘

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Early Riser

생각정리

백준 2667번: 단지번호 붙이기 (파이썬, BFS)
Algorithm

백준 2667번: 단지번호 붙이기 (파이썬, BFS)

2022. 8. 22. 16:14

BFS로 푸는 문제이다.

아파트가 있는곳은 1, 아파트가 없는곳은 0으로 표시되기 때문에(이진법) 방문여부를 확인하는 배열을 따로 만들지 않고 방문 시 배열값을 0으로 함으로써 다시 방문할 일이 없게 하였다.

근소한 차이긴 하지만 실행시간을 약간이라도 줄이는 것을 확인하였다.

 

import sys
from collections import deque

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


def bfs(x, y):
    global cnt
    graph[x][y] = 0
    q = deque([(x, y)])
    while q:
        now = q.popleft()
        for i in range(4):
            nx = now[0] + dx[i]
            ny = now[1] + dy[i]
            if 0 <= nx < N and 0 <= ny < N and graph[nx][ny] == 1:
                graph[nx][ny] = 0
                cnt += 1
                q.append((nx, ny))


N = int(sys.stdin.readline())
graph = []
for _ in range(N):
    graph.append(list(map(int, sys.stdin.readline().strip())))
ans = []

for x in range(N):
    for y in range(N):
        if graph[x][y] == 1:
            cnt = 1
            bfs(x, y)
            ans.append(cnt)
ans.sort()
print(len(ans))
[print(ans[k]) for k in range(len(ans))]

'Algorithm' 카테고리의 다른 글

백준 13565번: 침투 (파이썬, DFS)  (0) 2022.08.22
백준 2468번: 안전영역 (파이썬, DFS)  (0) 2022.08.22
백준 7576번: 토마토 (파이썬, BFS)  (0) 2022.08.22
백준 1654번: 랜선 자르기 (파이썬, 이분탐색)  (0) 2022.08.22
백준 1931번: 회의실 배정 (파이썬, 그리디 알고리즘)  (0) 2022.08.22
    'Algorithm' 카테고리의 다른 글
    • 백준 13565번: 침투 (파이썬, DFS)
    • 백준 2468번: 안전영역 (파이썬, DFS)
    • 백준 7576번: 토마토 (파이썬, BFS)
    • 백준 1654번: 랜선 자르기 (파이썬, 이분탐색)
    Early Riser
    Early Riser
    2년차 프론트엔드 개발자입니다. https://github.com/EarlyRiser42

    티스토리툴바