본문 바로가기

알고리즘

(123)
[JAVA] 백준 13549번: 숨바꼭질 3 import java.util.ArrayDeque; import java.util.Scanner; public class baekjoon13549 { public static void main(String[] args) { ArrayDeque dq = new ArrayDeque(); Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int k = sc.nextInt(); int max = 200000; boolean visit[] = new boolean[max]; int dist[] = new int[max]; dq.addFirst(n); while (!dq.isEmpty()) { int cur = dq.removeFirst(); if (cur =..
[JAVA] 백준 14226번: 이모티콘 import java.util.Arrays; import java.util.LinkedList; import java.util.Queue; import java.util.Scanner; public class baekjoon14226 { public static void main(String[] args) { // 화면에 있는 이모티콘을 모두 복사해서 클립보드에 저장한다. // 클립보드에 있는 모든 이모티콘을 화면에 붙여넣기 한다. // 화면에 있는 이모티콘 중 하나를 삭제한다. // 이모티콘 1개에서 시작 Scanner sc = new Scanner(System.in); int s = sc.nextInt(); int max = 2000; boolean visit[][] = new boolean[max]..
[JAVA] 백준 13913: 숨바꼭질4 import java.util.LinkedList; import java.util.Queue; import java.util.Scanner; import java.util.Stack; public class baekjoon13913 { public static void main(String[] args) { // 수빈이와 동생의 숨바꼭질 (동생을 찾아라) // 수빈이는 +1, -1, *2 로 이동을 할 수 있다. // 수빈이가 동생을 찾는데 걸리는 최소시간과, 최단경로를 나타내라 // 4, 5, 6, 7 경로로 이동하였을 때 // 최단 경로를 구하는 방법 // dist[5] = 4 // dist[6] = 5 // dist[7] = 6 // dist[4] = 0 // stack에 넣어주고 stack에서 하..
[JAVA] 백준 1697번: 숨바꼭질 import java.util.ArrayList; import java.util.Arrays; import java.util.LinkedList; import java.util.Queue; import java.util.Scanner; public class baekjoon1697 { public static void main(String[] args) { // 수빈이와 동생의 좌표가 주어진다. // 수빈이는 x+1, x-1, 2x로 이동할 수 있다. // 동생을 찾는 가장 빠른 시간을 구하라 Scanner sc = new Scanner(System.in); // 수빈이의 좌표 int x = sc.nextInt(); // 동생의 좌표 int y = sc.nextInt(); Queue q = new Lin..
BFS BFS 알고리즘? 모든 가중치가 1일때 최단거리를 구하는 알고리즘이다. BFS를 이용해 해결할 수 있는 문제는 아래와 같은 조건을 만족해야 한다. 1. 최소 비용 문제이어야 한다. 2. 간선의 가중치가 1이어야 한다. 3. 정점과 간선의 개수가 적어야 한다. (적다는 것은 문제의 조건에 맞춰서 해결할 수 있다는 것을 의미한다.) 간선의 가중치가 문제에서 구하라고하는 최소 비용과 의미가 일치해야 한다. 즉 거리의 최소값을 구하는 문제라면 가중치는 거리를 의미해야 하고, 시간의 최소값을 구하는 문제라면 가중치는 시간을 의미해야 한다.
[JAVA] 백준 2146번: 다리 만들기 요구 사항 두개의 섬을 이을 수 있는 가장 짧은 다리의 길이를 구하라 문제 해결 1. 섬과 바다를 구분하는 어레이를 만든다. 2. 각각의 섬을 구분할 수 있는 어레이를 만든다. 3. 각각의 섬 가장 자리로 부터 떨어지는 거리의 값을 저장한 어레이를 만든다. 3-2 각각의 섬 가장 자리로 부터 떨어진 거리의 값을 구하는 어레이에서, 새로운 좌표가 바다인데 이미 값이 들어있는 경우에는 현재 값과 해당 좌표의 값을 더한 후 어레이 리스트에 저장 3-3 가장 자리로부터 떨어진 값을 구하는 어레이에서 다음 좌표가 원 출발지와 다른 땅일 경우 현재 값을 결과 어레이 리스트에 저장 4. 어레이 리스트에서 가장 작은 값을 구한다. 1. 섬과 바다를 구분하는 어레이를 만든다. input 값을 모두 받아 어레이에 저장해보..
[JAVA] 백준 16940번: BFS 스페셜 저지 진행중 import java.util.ArrayList; import java.util.Arrays; import java.util.LinkedList; import java.util.Queue; import java.util.Scanner; public class baekjoon16940 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); ArrayList[] info = new ArrayList[n + 1]; boolean[] visit = new boolean[n + 1]; int[] order = new int[n + 1]; int[] parent = new int[n..
[JAVA] 백준 16947번: 서울 지하철 2호선 요구사항 역과 순환선 사이의 거리를 공백으로 구분해 출력한다. 문제 해설 최소거리를 확인하는 문제가 아니기 때문에 dfs를 이용하였다. 기존 dfs 문제와 다른점이라고 한다면, 사이클 (순환선) 에 포함되는 역을 찾아야 한다는 것이다. 아래와 같은 로직을 이용하여 문제를 풀어보았다. 1. 지나는 역을 모두 스택에 넣는다. 2. 이미 방문한 역이 면서 거리차이가 2이상일 경우, 해당역은 사이클의 시작지점이자 종결지점이다. 3. 사이클의 시작지점이 나타날 때까지 스택에서 값을 하나씩 빼고, 뺀 값은 사이클의 포함되는 것을 표시해주었다. (isCycle) 4. 마지막으로 사이클의 포함되는 지역은 0을 print 해주고 cycle에 포함되지 않는 값인 경우에는 가장 가까운 cycle과의 거리를 print해주었다..