본문 바로가기

그래프 이론65

[프로그래머스] [카카오 인턴] 경주로 건설 - JAVA https://school.programmers.co.kr/learn/courses/30/lessons/67259 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr 풀이(0, 0)에서 (N-1, N-1)까지 이동해야한다. 1은 벽을 의미하므로 0만을 통과해서 갈 수 있고, 직선도로는 100, 코너는 500이 필요하다. 즉, 방향을 같이 저장하여 방향이 달라지면 코너가 생기는 것이므로 500을 추가하고, 항상 100을 추가하면 된다. 방향을 같이 저장하면서 bfs탐색을 진행했고, 비용을 최소로 해야하기때문에 board 이차원배열에 비용을 같이 저장하면서 진행했다... 2024. 5. 12.
[백준] 28071: 승형이의 사탕 사기 - JAVA https://www.acmicpc.net/problem/28071 풀이dp문제이다. M개의 사탕 상자를 가져갈 수 있고, 사탕 개수의 총 합은 K로 나누어 떨어져야 한다. 상자의 개수와 나머지에 따라 dp배열을 생성한다. dp[i][j]에서 i를 상자의 개수, j를 나머지라고 하면 dp[i][j]의 값은 i-1개의 상자에서 "j - 현재 사탕상자의 사탕 개수"일때의 dp값을 이용하여 갱신한다. "j - 현재 사탕상자의 사탕 개수"가 음수가 되면 안되기 때문에 Math.floorMod연산을 사용했다. dp배열을 채운 후 나머지가 0인 경우 중 최댓값을 구한다.  메모리: 15152KB시간: 424ms언어: Java 11import java.io.*;import java.util.*;public class.. 2024. 5. 11.
[백준] 21738: 얼음깨기 펭귄 - JAVA https://www.acmicpc.net/problem/21738 풀이그래프 탐색 문제. 펭귄이 얼음 위에 올라가있는데 떨어지지 않으려면 연결된 지지대 얼음 2개가 필요하다. 최소한의 얼음만 남기고 얼음을 깨야한다. 펭귄의 위치로부터 탐색한다. 먼저 발견한 얼음이 가깝다는 것이므로 먼저 발견한 2개의 지지대 얼음을 제외한 나머지 얼음은 깨는 것으로 한다.  메모리: 152136KB시간: 696ms언어: Java 11import java.io.*;import java.util.*;public class Main { static int N, S, P, ans; static ArrayList> list; public static void main(String[] args) throws IOE.. 2024. 5. 11.
[백준] 2636: 치즈 - JAVA https://www.acmicpc.net/problem/2636 풀이구현 + 그래프탐색문제였다. 공기와 맞닿아있는 치즈는 한 시간이 지나면 녹는다. 치즈 내부에 구멍이 있을 수 있는데 외부 공기와 연결되어있지 않으면 치즈를 녹이지 않는다. 판의 가장자리는 치즈가 놓이지 않으므로 (0,0)은 항상 공기이다. (0,0)부터 시작하여 BFS탐색을 통해 공기면 Quque에 넣어주고, 치즈면 녹인다. ✔️참고 1.static int[] dr = { 1, -1, 0, 0 };static int[] dc = { 0, 0, 1, -1 }; 2.static int[][] vector = { { 0, 1 }, { 1, 0 }, { 0, -1 }, { -1, 0 } };사방탐색을 할 때 1번 코드보다 2번 코드로 하는 것.. 2024. 5. 11.
[백준] 20869: 김밥천국의 계단 - JAVA https://www.acmicpc.net/problem/28069 풀이bfs와 dp로 접근할 수 있는 문제.  bfs메모리: 57612KB시간: 204ms언어: Java 11import java.io.*;import java.util.*;public class Main { 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.n.. 2024. 5. 11.