본문 바로가기

ALGORITHM

(212)
백준 16236 아기상어 (Java) 1. 문제 링크 16236번: 아기 상어 N×N 크기의 공간에 물고기 M마리와 아기 상어 1마리가 있다. 공간은 1×1 크기의 정사각형 칸으로 나누어져 있다. 한 칸에는 물고기가 최대 1마리 존재한다. 아기 상어와 물고기는 모두 크기를 가 www.acmicpc.net 2. 문제 및 입출력예제 3. 문제 풀이 BFS와 PriorityQueue를 이용해 풀었다. 현재 상어의 위치를 기준으로 사방으로 BFS 하면서 먹을 수 있는 크기인지 or 지나갈 수 있는 크기인지 확인해서 각각 PQueue와 Queue에 넣는다. Point 클래스에 Comparable을 구현해서 정렬된 상태로 PQueue에 들어간다. 주의할 점은 맨해튼 거리를 사용하는 것이 아니고, 움직인 거리를 더해야 한다. 4. 코드 import ja..
백준 9375 패션왕 신해빈 (Java) 1. 문제 링크 9375번: 패션왕 신해빈 첫 번째 테스트 케이스는 headgear에 해당하는 의상이 hat, turban이며 eyewear에 해당하는 의상이 sunglasses이므로 (hat), (turban), (sunglasses), (hat,sunglasses), (turban,sunglasses)로 총 5가지 이다. www.acmicpc.net 2. 문제 및 입출력예제 3. 문제 풀이 입력 받을 때 종류별로 담는데 Map에 종류와 그 종류에 몇개가 있는지 넣는다. 중복이 없다고 했기 때문에 숫자만 세도 괜찮다. 모든 입력을 받은 후 종류별로 개수를 곱하면 되는데, 안 하는 경우도 생각해서 +1한 값을 곱한다. 그리고 아무것도 입지 않은 상태인 경우인 하나를 빼면 끝이다. 4. 코드 import ..
백준 1920 수 찾기 (Java) 1. 문제 링크 1920번: 수 찾기 첫째 줄에 자연수 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 줄에는 N개의 정수 A[1], A[2], …, A[N]이 주어진다. 다음 줄에는 M(1 ≤ M ≤ 100,000)이 주어진다. 다음 줄에는 M개의 수들이 주어지는데, 이 수들 www.acmicpc.net 2. 문제 및 입출력예제 3. 문제 풀이 그냥 모든 수를 입력받고 찾는다면 시간 초과가 난다. 이진 탐색을 해야 하는데 정렬 후 jdk 메서드 중 하나인 이분 탐색을 이용했다. 값이 음수가 나올 경우에는 목록에 값이 없는 것이고, 양수면 존재하는 것이다. 4. 코드 import java.io.BufferedReader; import java.io.InputStreamReader; import jav..
백준 1759 암호 만들기 (Java) 1. 문제 링크 1759번: 암호 만들기 첫째 줄에 두 정수 L, C가 주어진다. (3 ≤ L ≤ C ≤ 15) 다음 줄에는 C개의 문자들이 공백으로 구분되어 주어진다. 주어지는 문자들은 알파벳 소문자이며, 중복되는 것은 없다. www.acmicpc.net 2. 문제 및 입출력예제 3. 문제 풀이 조합을 이용해 가능한 모든 암호를 만든다. 출력 전에 조건문을 이용해 모음 하나, 모음 두 개 이상인지 확인해서 출력한다. 4. 코드 import java.io.BufferedReader; import java.io.IOException; import java.util.Arrays; public class Main { static int L, C, numbers[], mo, ja; static String[] ..
백준 2567 색종이-2 (Java) 1. 문제 링크 2567번: 색종이 - 2 가로, 세로의 크기가 각각 100인 정사각형 모양의 흰색 도화지가 있다. 이 도화지 위에 가로, 세로의 크기가 각각 10인 정사각형 모양의 검은색 색종이를 색종이의 변과 도화지의 변이 평행하도록 www.acmicpc.net 2. 문제 및 입출력예제 3. 문제 풀이 입력받은 값 반복문을 통해 스카프가 존재하는 구역을 표시한다. 나는 세로와 가로를 따로 구했다. 반복문을 돌면서 스카프가 놓여있다면 가로에서 처음 놓였을 때 양쪽 세로를 미리 더했다. 위에는 스카프가 있는데 밑에는 스카프가 없다면 가로를 1만큼 더한다. 가로에서 처음 놓인게 아닐 때, 밑이 없으면 밑을 1만큼 추가한다. 이렇게 스카프 밑면의 값을 다 구한 다음에 *2하면 가로 값도 전부 구한 것이다. ..
백준 27160 할리갈리 (Java) 1. 문제 링크 27160번: 할리갈리 한별이가 종을 쳐야 하면 YES을, 아니면 NO를 출력해주세요. www.acmicpc.net 2. 문제 및 입출력예제 3. 문제 풀이 Map을 이용해 해당 과일이 없을 경우 새로 추가하고, 있을 경우 기존 값에 더해서 넣는다. 모든 입력이 끝난 후 value 중 5가 있으면 YES를 출력하고, 없다면 NO를 출력한다. 4. 코드 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.HashMap; public class Main { static StringBuilder sb = new StringBuilder(); publi..
백준 1717 집합의 표현 (Java) 1. 문제 링크 1717번: 집합의 표현 초기에 $n+1$개의 집합 $\{0\}, \{1\}, \{2\}, \dots , \{n\}$이 있다. 여기에 합집합 연산과, 두 원소가 같은 집합에 포함되어 있는지를 확인하는 연산을 수행하려고 한다. 집합을 표현하는 프로그램을 작 www.acmicpc.net 2. 문제 및 입출력예제 3. 문제 풀이 makeSet으로 서로소 집합을 만들고, 입력 받은 명령어가 0인 경우 union으로 합집합을 만들고, 그 외 명령어이 경우 findSet을 이용해 두 집합이 부모가 같은지 확인한다. 4. 코드 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; impor..
백준 2805 나무 자르기 (Java) 1. 문제 링크 2805번: 나무 자르기 첫째 줄에 나무의 수 N과 상근이가 집으로 가져가려고 하는 나무의 길이 M이 주어진다. (1 ≤ N ≤ 1,000,000, 1 ≤ M ≤ 2,000,000,000) 둘째 줄에는 나무의 높이가 주어진다. 나무의 높이의 합은 항상 M보 www.acmicpc.net 2. 문제 및 입출력예제 3. 문제 풀이 나무 높이 범위가 매우 커서 이분탐색으로 풀었다. 최댓값과 자른 값의 중간 값을 이용해 중간값보다 큰 나무에서 그만큼 베어간다. 자른 나무의 합이 원하는 값인 M보다 작으면 높이를 낮춰야 하니까 현재 최댓값을 중간값으로 넣고 반복한다. 만약 자른 나무의 합이 M보다 크거나 같아지면 중간값보다 하나 큰 값을 넣고 반복한다. 뭔가 하나씩 풀어쓰려니까 애매한데 자른 값이 ..