본문 바로가기

분류 전체보기

(83 개)
[JAVA] 백준 7576번: 토마토 문제7569번: 토마토 (acmicpc.net) 문제와 동일하지만, 2차원 배열로 토마토가 주어지는 문제.익은 토마토, 익지 않은 토마토와 빈 공간이 2차원 형태로 주어질 때, 토마토가 모두 익는데 걸리는 최소 시간을 구하는 문제. 아이디어BFS를 통해 익은 토마토를 시작으로 다른 토마토를 익혀가며 최소 일 수를 구한다.[JAVA] 백준 7569번: 토마토 (tistory.com) 와 풀이법은 동일하다. 풀이import java.io.*;import java.util.*;public class Main { static int N, M; static int[][] graph; static int[] dx = {-1, 1, 0, 0}; static int[] dy = {0, 0, -1,..
[JAVA] 백준 7569번: 토마토 문제3차원 형태로 -1은 빈 공간, 1은 익은 토마토, 0은 익지 않은 토마토가 주어지고, 익은 토마토는 하루에 상, 하, 좌, 우, 위, 아래 6방향으로 한 칸씩 익지 않은 토마토를 익힌다.토마토 배열 상태가 주어질 때, 모든 토마토가 익는데 걸리는 최소 시간을 구하는 문제. 아이디어BFS를 통해 익은 토마토를 시작으로 다른 토마토를 익혀가며 최소 일 수를 구한다.먼저, 익은 토마토들의 좌표와 익는데 걸린 일 수(초기 값이므로 0)를 큐에 저장한다.이 때, 모든 토마토가 익어있을 수 있으므로, 이를 체크하여 만약 모두 익은 상태라면 0을 출력하고 종료한다.아니라면 BFS를 돌리며 익은 토마토가 다른 토마토를 익힐 수 있으면 익히고 큐에 좌표를 저장할 때, 자기 자신이 익는데 걸린 횟수 + 1을 하여 같..
[JAVA] 백준 5430번: AC 문제R 연산은 배열을 뒤집는 연산, D 연산은 배열의 첫 번째 수를 버리는 연산이다.숫자가 담긴 배열이 문자열 형태로 주어지고 수행해야 하는 연산이 문자열로 주어질 때, 연산을 수행한 결과를 출력하는 문제. 아이디어배열이 "[1,2,3]"과 같이 문자열로 주어지기에 문자열 파싱을 잘해야 숫자를 뽑아내고 배열에 저장할 수 있다.Java의 substring 메서드로 문자열의 앞, 뒤에 붙어있는 '[', ']' 문자를 제거한 후, split 메서드를 통해 ','를 기준으로 숫자를 뽑아낸다.문자열을 뒤집는 연산의 경우 직접 배열을 뒤집는 reverse 메서드를 떠올릴 수 있겠지만, 배열의 길이가 길어질수록 시간초과가 발생할 확률이 상당히 높다.이에 배열이 뒤집힌 상태인지 아닌지 체크하는 boolean 타입의 i..
[JAVA] 백준 14940번: 쉬운 최단거리 문제2차원의 형태로 1은 지나갈 수 있는 길, 0은 벽, 2가 출발지로 주어질 때, 출발지에서 모든 다른 지점까지의 최단 거리를 2차원 형태로 출력하는 문제. 아이디어최단거리를 구하는 문제로, BFS를 사용해 풀이한다.입력을 받으며 2의 위치를 먼저 큐에 넣어놓고 해당 경로를 0으로 초기화 한 후, BFS를 돌린다.BFS를 돌리며 최단거리를 갱신하고 과정이 모두 끝난 후, 각 요소를 탐색해 길인데 도달하지 못한 요소를 -1로 변경한 후 출력해준다. 풀이import java.io.*;import java.util.*;public class Main { static int n, m; static int[][] graph; static boolean[][] visited; static i..
[JAVA] 백준 11403번: 경로 찾기 문제가중치 없는 방향 그래프 G가 주어졌을 때, 모든 정점 (i, j)에 대해 i에서 j로 가는 길이가 양수인 경로가 있는지 출력하는 문제. 아이디어각 노드에서 출발해 모든 노드로 도착하는 경로가 있는지 찾는 문제이므로, 플로이드-워셜 알고리즘을 사용해 풀이한다. (BFS를 써도 될 것 같긴 하다)인접 행렬을 입력받고 모든 노드와 k에 대해, i -> k == 1 이고, k -> j == 1 인지 체크한 후, 정답 배열을 갱신한다. 풀이import java.io.*;import java.util.*;public class Main { public static void main(String[] args) throws Exception { BufferedReader br = new Buff..
[JAVA] 백준 11286번: 절댓값 힙 문제정수 x 가 주어지고, x가 0이 아닐 때, x를 배열에 저장한다.x가 0일 때는, 배열에서 절댓값이 가장 작은 값을 출력하고, 배열에서 제거한다.(절댓값이 가장 작은 값이 여러개일 때는, 가장 작은 수를 출력한다.)N개의 연산이 주어질 때, 연산을 수행한 결과를 출력하는 문제. 아이디어자바의 우선순위 큐를 사용해 절댓값 힙을 구현한다.우선순위 큐를 선언하고, 이 큐의 정렬 기준을 comparator를 오버라이딩하여 변경한다. 풀이import java.io.*;import java.util.*;public class Main { public static void main(String[] args) throws Exception { BufferedReader br = new Buffe..
[JAVA] 백준 6064번: 카잉 달력 문제각 년도를 형태로 표현하고, 첫 해를 , 두 번째 해를 로 표현한다.M과 N이 주어질 때, 다음 해를 라고 한다면,x y 방식으로 다음 해의 년도를 구한다.M, N, x, y가 주어질 때, 가 몇 번째 해를 나타내는지 구하는 문제. 아이디어규칙성을 찾아 해결한다.M=6, N=9가 주어진 경우, 년도를 나열해보자.(1) 1:1, (2) 2:2, (3) 3:3, (4) 4:4, (5) 5:5, (6) 6:6(7) 1:7, (8) 2:8, (9) 3:9, (10) 4:1, (11) 5:2, (12) 6:3(13) 1:4, (14) 2:5, (15) 3:6, (16) 4:7, (17) 5:8, (18) 6:9(19) 1:1 ...총 M과 N의 최소공배수 만큼의 년도를 표시할 수 있으며, x:y가 해당 해..
[JAVA] 백준 5525번: IOIOI 문제N+1개의 I와 N개의 O로 이루어져 있으며, I 와 O가 교대로 나오는 문자열을 $P_{n}$ 이라고 한다.I 와 O 로만 이루어진 문자열 S와 N이 주어질 때, $P_{n}$이 몇 군데 포함되어 있는지 구하는 문제. 아이디어반복문을 통해 I를 찾고, I를 찾았다면 "IOIO ..." 의 패턴이 반복되는지 검사하고 수를 카운트한다.while 문을 통한 패턴 탐색이 끝났다면, i를 마지막 탐색 위치로 옮겨 계속해서 탐색한다. 먼저 I 를 찾는다.tmp 번째 문자가 I 일 경우, while 문을 통해 tmp + 1 번째 요소가 O 이면서, tmp + 2 번째 요소가 I 인지 체크한다.패턴이 맞을 경우, 우리가 찾는 Pn의 패턴이 될 때까지 cnt 변수에 1을 더해 패턴의 길이를 늘려간다.이 과정을 반복..