팡세영
Log sey
팡세영
전체 방문자
오늘
어제
  • 분류 전체보기 (73)
    • PS (45)
      • programmers (13)
      • 백준 (29)
    • Android (16)
    • Daily (0)
    • Kotlin (6)
    • Design Pattern (1)
    • Java (1)
    • Flutter (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • compose
  • mvvm
  • 문자열
  • 프로그래머스
  • DFS
  • ArcitecturePattern
  • binding
  • 해쉬맵
  • 골드
  • 안드로이드
  • 구현
  • 실버
  • java
  • BFS
  • 정렬
  • Kotlin
  • 자바
  • flutter
  • 의존성 주입
  • 하단네비게이션바
  • LEVEL2
  • TestCode
  • 이분탐색
  • 완전탐색
  • CustomView
  • programmers
  • 코틀린
  • Android
  • programmers #프로그래머스
  • 백준

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
팡세영
PS/백준

백준 - 알고리즘 수업 (24444) - Java

백준 - 알고리즘 수업 (24444) - Java
PS/백준

백준 - 알고리즘 수업 (24444) - Java

2022. 7. 31. 22:34

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

 

24444번: 알고리즘 수업 - 너비 우선 탐색 1

첫째 줄에 정점의 수 N (5 ≤ N ≤ 100,000), 간선의 수 M (1 ≤ M ≤ 200,000), 시작 정점 R (1 ≤ R ≤ N)이 주어진다. 다음 M개 줄에 간선 정보 u v가 주어지며 정점 u와 정점 v의 가중치 1인 양방

www.acmicpc.net


[문제 해결]

  • ArrayList로 무방향 그래프를 만들어준다.
  • ArrayList를 오름차순 정렬한다.
  • bfs를 순회하면서 방문하지 않은 노드를 방문 처리하고 방문한 순서를 기록해준다.

[Java]

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;


public class Main{
    static ArrayList<ArrayList<Integer>> list = new ArrayList<>();
    static boolean visited[];
    static int result[];
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());

        int m = Integer.parseInt(st.nextToken());
        int n = Integer.parseInt(st.nextToken());
        int start = Integer.parseInt(st.nextToken());

        result = new int[m+1];

        for(int i=0; i<=m; i++) list.add(new ArrayList<>());

        for(int i=0; i<n; i++){
            st = new StringTokenizer(br.readLine());
            int a = Integer.parseInt(st.nextToken());
            int b = Integer.parseInt(st.nextToken());
            list.get(a).add(b);
            list.get(b).add(a);
        }

        for(int i=1; i<=m; i++){
            var pos = list.get(i);
                Collections.sort(pos);
            }


        bfs(start, m);

        for(int i=1; i<=m; i++)
            System.out.println(result[i]);
    }

    public static void bfs(int start, int m){
        int cnt = 1;
        visited = new boolean[m+1];
        Queue<Integer> queue = new LinkedList<>();
        queue.add(start);
        visited[start] = true;
        result[start] = cnt++;

        while(!queue.isEmpty()){
            int cur = queue.poll();

            for(int num : list.get(cur)){
                if(!visited[num]){
                    queue.add(num);
                    visited[num] = true;
                    result[num] = cnt++;
                }
            }
        }
    }
}

처음에 2차원 배열로 그래프를 만들어 주었는데, 메모리 초과 떠서 ArrayList로 수정했습니다.

 

그리고 문제를 푸실때 주의 하실 점은,

 

1~m까지 순서대로 정점들의 방문한 순서를 출력해주어야 합니다.

'PS > 백준' 카테고리의 다른 글

백준 - 점프왕 쩰리 (Small) - Java  (0) 2022.08.19
백준 알고리즘 수업 - 너비 우선 탐색 4 (24447) - Java  (0) 2022.08.01
백준 가희와 키워드 (22233) - Java  (0) 2022.07.29
백준 데스 나이트 (16948) - Java  (0) 2022.07.25
[백준] Java vs C++ 3613 (Java)  (2) 2022.07.12
    'PS/백준' 카테고리의 다른 글
    • 백준 - 점프왕 쩰리 (Small) - Java
    • 백준 알고리즘 수업 - 너비 우선 탐색 4 (24447) - Java
    • 백준 가희와 키워드 (22233) - Java
    • 백준 데스 나이트 (16948) - Java
    팡세영
    팡세영
    Android, CS, PS

    티스토리툴바

    단축키

    내 블로그

    내 블로그 - 관리자 홈 전환
    Q
    Q
    새 글 쓰기
    W
    W

    블로그 게시글

    글 수정 (권한 있는 경우)
    E
    E
    댓글 영역으로 이동
    C
    C

    모든 영역

    이 페이지의 URL 복사
    S
    S
    맨 위로 이동
    T
    T
    티스토리 홈 이동
    H
    H
    단축키 안내
    Shift + /
    ⇧ + /

    * 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.