ProblemSolve/항해99 코테스터디

99클럽 코테 스터디 8일차 TIL (미들러): [백준][Java] 2644 촌수계산 - 실버2

노루동산 2024. 11. 4. 15:26

 

문제 보기

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

 

 

풀이

어제 풀었던 문제와 거의 동일한 흐름이라 바로 풀어버렸다.

https://mountain-noroo.tistory.com/226

 

99클럽 코테 스터디 7일차 TIL (챌린저): [백준][Java] 1240 노드사이의 거리 - 골드5

문제 보기https://www.acmicpc.net/problem/1240  풀이BFS로 문제를 풀었다.시작 노드부터 현재 노드까지의 길이가 얼만지 계속 기록하고현재 노드가 입력된 노드에 도달할 시거리를 출력하였다.  while (!q

mountain-noroo.tistory.com

 

접근 방식은 동일하나 노드 사이에 거리가 주어지지 않으니

새 노드를 탐색할 때 무조건 1만 더하면 된다는 차이가 있다.

 

덕문에 8분 만에 문제를 풀었다.

코드도 어제 코드를 그대로 활용하였다.

 

 

전체 코드

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;

public class Main {
  public static void main(String[] args) throws IOException {

    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

    int N = Integer.parseInt(br.readLine());
    String[] inputs = br.readLine().split(" ");
    int start = Integer.parseInt(inputs[0]);
    int end = Integer.parseInt(inputs[1]);
    int M = Integer.parseInt(br.readLine());
    List<Integer>[] list = new ArrayList[N+1];
    for(int i = 1; i <= N; i++){
      list[i] = new ArrayList<>();
    }
    for (int i = 0; i < M; i++) {
      inputs = br.readLine().split(" ");
      list[Integer.parseInt(inputs[0])].add(Integer.parseInt(inputs[1]));
      list[Integer.parseInt(inputs[1])].add(Integer.parseInt(inputs[0]));
    }

    boolean[] visited = new boolean[N + 1];
    visited[start] = true;

    Queue<int[]> queue = new LinkedList<>();
    for(int j = 0; j < list[start].size(); j++) {
      queue.add(new int[]{list[start].get(j), 1});
    }

    while (!queue.isEmpty()) {
      int[] node = queue.poll();
      if(node[0] == end) {
        bw.write(node[1] + "\n");
        bw.flush();
        bw.close();
        return;
      }

      for(int j = 0; j < list[node[0]].size(); j++) {
        if(!visited[list[node[0]].get(j)]) {
          visited[list[node[0]].get(j)] = true;
          queue.add(new int[]{list[node[0]].get(j), node[1] + 1});
        }
      }
    }

    bw.write("-1\n");
    bw.flush();
    bw.close();


  }
}

 

 

GitHub 링크

https://github.com/MetroDefro/CodingTest_AutoSave/tree/main/%EB%B0%B1%EC%A4%80/Gold/1240.%E2%80%85%EB%85%B8%EB%93%9C%EC%82%AC%EC%9D%B4%EC%9D%98%E2%80%85%EA%B1%B0%EB%A6%AC

 

CodingTest_AutoSave/백준/Gold/1240. 노드사이의 거리 at main · MetroDefro/CodingTest_AutoSave

모든 코딩 테스트 자동 저장. Contribute to MetroDefro/CodingTest_AutoSave development by creating an account on GitHub.

github.com