[백준 -24480 ] java , 알고리즘 수업 - 깊이 우선 탐색 2

2024. 2. 26. 12:27·문제 풀이/백준 문제풀이
728x90
반응형
SMALL

 

문제를 풀기 전 그래프 및 DFS 개념이 부족하다면 아래 포스팅을 먼저 읽어주세요!

https://sunro1994.tistory.com/179

 

[자료구조 - Graph 와 DFS] Graph와 DFS란?

[Algorithm] 깊이 우선 탐색 목차 1. DFS란? 2. 그래프란? 그래프의 특징 그래프의 종류 그래프 용어 1. DFS란? 깊이 우선 탐색(Depth-First-search)은 그래프 완전 탐색 기법중 하나 그래프의 시작 노드에서

sunro1994.tistory.com


 

문제해결중 놓친 중요한 부분 - 내림차순!

Do it 알고리즘 자바편을 통해 DFS를 공부하고 해당 코드를 변경해서 이 문제를 풀려고 했다.

책에서 제공했던 백준 문제는 아래의 문제였다.

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

 

11724번: 연결 요소의 개수

첫째 줄에 정점의 개수 N과 간선의 개수 M이 주어진다. (1 ≤ N ≤ 1,000, 0 ≤ M ≤ N×(N-1)/2) 둘째 줄부터 M개의 줄에 간선의 양 끝점 u와 v가 주어진다. (1 ≤ u, v ≤ N, u ≠ v) 같은 간선은 한 번만 주어

www.acmicpc.net

 

이번 문제는 위 문제와 달랐던 점이 몇 가지 있다.

첫 번째, 방문 순서를 출력할 것

두 번째, 인접 정점은 내림차순으로 정렬

 

정렬을 하지 않아 계속 [1,4,3,2,0]이 아닌 [1,4,2,3,0]으로 나오는 것이었다.

문제에서 요구하는 내용을 꾸준히 체크하고 반례를 찾아나서는 습관을 들여야겠다.

 

 

[정답코드]

 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.nio.Buffer;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.StringTokenizer;

public class test2 {
//인접 리스트 배열
    static ArrayList<Integer>[] A;
//방문배열 
    static boolean[] visited;
//방문 순서 담을 배열
static int[] result;
//방문 순서 카운트
static int cnt = 1;
    public static void main(String[] args) throws IOException {

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
        int n = Integer.parseInt(st.nextToken());
        int m = Integer.parseInt(st.nextToken());
        int v = Integer.parseInt(st.nextToken());

//1부터 시작하도록 각 필드값 초기화
        A = new ArrayList[n+1];
        visited = new boolean[n+1];
        result = new int[n + 1];



//인접리스트의 각 요소 초기화
        for (int i = 1; i < n + 1; i++) {
            A[i] = new ArrayList<Integer>();
        }
//인접리스트배열에 문제에서 주어진 값 삽입
//양방향이기때문에 각 리스트배열에도 양방향으로 추가해준다.
        for (int i = 0; i < m; i++) {
            st = new StringTokenizer(br.readLine());
            int s = Integer.parseInt(st.nextToken());
            int e = Integer.parseInt(st.nextToken());
            A[s].add(e);
            A[e].add(s);
        }
        int cnt = 0;
//방문하지 않은 노드인경우 DFS 메서드 수행
        if (!visited[v]) {
            DFS(v);
        }
        for (int i = 1; i < n+1; i++) {
            System.out.println(result[i]);
        }

    }

    private static void DFS(int v) {
        if(visited[v]) return;

        visited[v] = true;
//첫 노드 방문 순서 삽입
        result[v] = cnt++;
//내림차순 정렬
        Collections.sort(A[v], Collections.reverseOrder());
        for (Integer i : A[v]) {
            if (!visited[i]) {
//재귀적 알고리즘 수행
                DFS(i);
            }
        }

    }
}

 

728x90
반응형
SMALL

'문제 풀이 > 백준 문제풀이' 카테고리의 다른 글

[백준 - 11659/ Java] 구간합 구하기  (4) 2024.03.12
[백준 - 2178/ 자바(Java)] 미로 탐색 문제 BFS로 해결하기  (1) 2024.02.28
[백준 11724 - 연결 요소의 개수] DFS를 활용한 문제 풀기  (0) 2024.02.24
숫자만 추출하기  (1) 2023.12.10
팰린드롬(회문 문자열)  (0) 2023.12.10
'문제 풀이/백준 문제풀이' 카테고리의 다른 글
  • [백준 - 11659/ Java] 구간합 구하기
  • [백준 - 2178/ 자바(Java)] 미로 탐색 문제 BFS로 해결하기
  • [백준 11724 - 연결 요소의 개수] DFS를 활용한 문제 풀기
  • 숫자만 추출하기
공부하고 기억하는 공간
공부하고 기억하는 공간
IT 비전공자로 시작하여 훌륭한 개발자가 되기 위해 공부하고 있는 공간입니다. 틀린 내용이나 부족한 부분이 있으면 댓글로 알려주세요 바로 수정하겠습니다.
    250x250
  • 공부하고 기억하는 공간
    IT - railroad
    공부하고 기억하는 공간
  • 전체
    오늘
    어제
    • 분류 전체보기 (325)
      • 면접 준비 (22)
        • OS (6)
        • Spring Security (0)
        • Java (3)
        • DB (11)
        • Network (3)
      • ElasticSearch (2)
      • Kafka (4)
      • Spring (22)
        • Spring Cloud (7)
        • Security6 (5)
        • JPA (12)
        • 프로젝트 리팩토링 회고록 (4)
        • Logging (8)
        • Batch (2)
      • Redis (17)
        • Redis 개념 (8)
        • Redis 채팅 (5)
        • Redis 읽기쓰기 전략 (1)
      • AWS (11)
      • 리눅스 (29)
        • 리눅스 마스터 2급 (5)
        • 네트워크(기초) (7)
        • 리눅스의 이해 (6)
        • 리눅스의 설치 (2)
        • 리눅스 운영 및 관리 (6)
      • JAVA-기초 (16)
        • JAVA기본 (11)
        • Design Pattern (5)
      • JSP (27)
        • JSP 기본 개념 (10)
        • JSP (1)
      • SQL (1)
      • TIL (36)
      • 문제 풀이 (2)
        • Programmers (9)
        • 백준 문제풀이 (28)
      • JavaScript (10)
      • HTML (17)
      • Ngrinder (1)
        • Ngrinder 문서 정리 (1)
  • 블로그 메뉴

    • 링크

    • 공지사항

    • 인기 글

    • 태그

      HTML
      리눅스마스터2급정리
      프로그래머스
      redis
      JSP
      레디스
      springsecurity
      Springframework
      Til
      Spring Data Redis
      JavaScript
      spring redis
      JS
      jsp기초
      자바스크립트
      백준
      자바 알고리즘
      자바 반복문
      자바 면접
      자바 면접질문
      java
      jsp request
      redis 채팅
      Spring
      리눅스마스터2급
      스프링프레임워크
      리눅스
      자바
      자바기초
      CSS
    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.3
    공부하고 기억하는 공간
    [백준 -24480 ] java , 알고리즘 수업 - 깊이 우선 탐색 2
    상단으로

    티스토리툴바