본문 바로가기

전체 글242

[백준] 23747: 와드 - JAVA https://www.acmicpc.net/problem/23747 풀이이 문제는 보드 위에서 이동과 와드 설치를 처리하는 문제로, 주어진 명령에 따라 보드의 상태를 변화시켜야 한다. W 명령을 수행하여 해당 위치와 인접한 같은 타입의 영역을 방문 처리하고, 상하좌우 이동을 통해 요리사의 위치를 업데이트했다. 최종적으로 방문한 위치를 '.'으로 표시하고, 방문하지 않은 위치를 '#'으로 표시하여 결과를 출력했다.  메모리: 127596KB시간: 720ms언어: Java 11import java.io.*;import java.util.*;public class Main { static int r, c; static char[][] board; static boolean[][] result;.. 2024. 6. 10.
[백준] 1263: 시간 관리 - JAVA https://www.acmicpc.net/problem/1263 풀이해야 할 일들 n개가 일을 처리하는데 걸리는 시간(s), 마감시간(t)이 주어진다. 이차원배열에 s와 t를 넣고 정렬하는데, 이때 정렬기준은 마감시간을 내림차순으로 정렬했다. 마감시간이 마지막인 것 부터 걸리는 시간을 빼주면 일을 언제 시작해야 하는지 구할 수 있다. 일을 시작해야할 시간을 갱신하면서 이 시간이 바라보고있는 일의 마감시간보다 작다면 하던대로 빼주고, 크다면 시작해야 할 시간을 현재 마감시간에서 걸리는 시간을 빼준 값으로 갱신한다.  메모리: 14576KB시간: 148ms언어: Java 11import java.io.*;import java.util.*;public class Main { public static v.. 2024. 5. 31.
[백준] 17953: 디저트 - JAVA https://www.acmicpc.net/problem/17953 풀이M종류의 디저트를 N일동안 하루에 하나씩 먹어야 한다. 전날 먹었던 것과 같은 것을 먹으면 만족감이 반으로 주는데, N일동안 최대의 만족감을 구해야 한다. 2차원 dp 배열을 만들었다. 각 날짜에 각 디저트마다 전날의 dp배열의 값들을 토대로 갱신해줬다. 전날과 같은 맛이라면 2로 나눠 더해줬다.  메모리: 92884KB시간: 552ms언어: Java 11import java.io.*;import java.util.*;public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new Buffered.. 2024. 5. 30.
[백준] 16472: 고냥이 - JAVA https://www.acmicpc.net/problem/16472 풀이문자열을 최대 N개 종류의 알파벳을 가진 문자열로 잘라야한다. abbcaccba 라는 문자열을 최대 2개 종류의 알파벳을 가진 문자열로 자르면 cacc 일때 길이가 4로 최대가 된다. 알파벳의 개수를 int 배열을 통해 저장하고, 새로운 알파벳이 나올 때마다 cnt를 늘려가면서 탐색한다. 이때 탐색은 투포인터 알고리즘으로 한다. cnt가 n보다 크면 left를 1늘려서 문자열의 길이를 줄이고, cnt가 n보다 작거나 같다면 right를 1늘려서 문자열의 길이를 늘린다.  메모리: 15492KB시간: 160ms언어: Java 11import java.io.*;public class Main { public static void m.. 2024. 5. 29.
[백준] 16194: 카드 구매하기 2 - JAVA https://www.acmicpc.net/problem/16194 풀이카드팩들의 가격이 주어진다. 카드 i개가 포함된 카드팩의 가격은 Pi원이다. dp 배열을 최대값으로 초기화 해주고, 탐색을 진행했다.dp[0] + card[n]dp[1] + card[n - 1]...dp[n] + card[0] `dp[n]` 은 위 경우 중 최소가 되는 값이다.   메모리: 14528KB시간: 144ms언어: Java 11import java.io.*;import java.util.*;public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new.. 2024. 5. 23.
[백준] 1577: 도로의 개수 - JAVA https://www.acmicpc.net/problem/1577 풀이n x m 사이즈의 도시에서 (0, 0) 부터 (n, m)까지 가는 경우의 수를 구해야 한다. 다만, 공사중인 도로가 있어서 지나갈 수 없는 곳이 있다. `0 0 0 1` 과 같이 주어지는데 이는 (0, 0)에서 (0, 1)로 가는 도로를 이용할 수 없다는 것을 말한다. 3차원배열을 만들어서 가로 도로, 세로 도로의 공사 여부를 저장했다. 그 후, (0, 0)으로 부터 가로로만 갔을 때, 세로로만 갔을 때를 1로 채워주고 bottom-up방식으로 dp배열을 채워주었다.  메모리: 14312KB시간: 128ms언어: Java 11import java.io.*;import java.util.*;public class Main { pu.. 2024. 5. 23.
[백준] 23843: 콘센트 - JAVA https://www.acmicpc.net/problem/23843 풀이충전기 m개로 n개의 전자기기를 충전해야한다. 전자기기마다 충전이 완료되는데 필요한 시간이 달라서 충전기에 전자기기를 적절하게 배치해야한다. 충전기가 비어있다면 충전에 걸리는 시간이 가장 긴 기기를 배치하는 게 적절했다. 따라서 우선순위큐를 이용해 시간이 오래걸리는 순으로 뽑아서 충전기에 넣었다. 충전기에 넣으면서 걸리는 시간을 정답에 갱신하면된다.  메모리: 15476KB시간: 180ms언어: Java 11import java.io.*;import java.util.*;public class Main { static class Charger { PriorityQueue chargers; Priority.. 2024. 5. 22.
[백준] 15591: MooTube (Silver) - JAVA https://www.acmicpc.net/problem/15591 풀이N번까지 번호를 가진 동영상들이 서로 연결되어있다. 연결마다 유사도가 k의 값으로 정해져 있다. 경로를 연결하여 유사도들 중 최소값이 두 동영상의 유사도가 된다. 특정 값을 정해 유사도가 그 값 이상인 동영상들의 개수를 묻는 문제이다. 시작 정점으로 할 동영상의 번호와, 특정 값이 주어지면 bfs탐색을 진행했다. 연결된 노드들을 탐색하여 유사도가 특정 값 K 이상일 때 카운트를 1증가시키며 큐에 넣어 계속했다.  메모리: 80360KB시간: 1008ms언어: Java 11import java.io.*;import java.util.*;public class Main { static class Node { int v;.. 2024. 5. 20.
[백준] 15971: 두 로봇 - JAVA https://www.acmicpc.net/problem/15971 풀이두 로봇이 서로 통신하기 위해서는 서로 인접한 지역에 있어야 한다. a구역에 있는 로봇과 b구역의 로봇에 서로 통신할 수 있는 지역으로 이동할 때 이동해야하는 거리의 최솟값을 구해야 한다. 생각한 풀이방법은 먼저 a지역에서 b지역까지 이동하고, 그 중 거리가 가장 큰 구간을 빼주는 것이다. dfs를 통해 int배열에 이동한 구역의 거리를 기록했고, 이 배열을 방문처리용도로 사용했다.  메모리: 80360KB시간: 1008ms언어: Java 11import java.io.*;import java.util.*;public class Main { static class Node { int v; int cost.. 2024. 5. 19.
[백준] 2230: 수 고르기 - JAVA https://www.acmicpc.net/problem/2230 풀이n개의 정수가 주어지고, 두 수를 골랐을 때 차이가 m 이상인 경우 중 제일 작은 경우를 골라야 한다. 정렬을 해놓고 슬라이딩윈도우를 통해 두 수를 골라 차이를 비교했다. start, end 이렇게 두 포인터를 두고 두 수의 차이가 m보다 작은 경우 end를 1 늘린다. 두 수의 차이가 큰 경우 정답을 갱신하고 start를 1늘린다.  메모리: 28584KB시간: 396ms언어: Java 11import java.io.*;import java.util.*;public class Main { public static void main(String[] args) throws IOException { BufferedRead.. 2024. 5. 19.