본문 바로가기

분류 전체보기

(215)
백준 22945 팀 빌딩 (Java) 1. 문제 링크 22945번: 팀 빌딩 개발자 $N$명이 팀 빌딩을 위해 한 줄로 서있다. 하나의 팀을 만들기 위해서는 개발자 2명이 반드시 모여야 한다. 개발자 A와 개발자 B가 팀을 만들 때 팀의 능력치는 아래와 같이 계산이 된다. (개 www.acmicpc.net 2. 문제 및 입출력예제 3. 문제 풀이 1. 맨 앞의 사람과 맨 뒤의 사람을 기준으로 능력치를 계산한다. 2. 두 개발자 사이의 거리와 능력치의 곱이 최대가 되어야 하기 때문에 둘 다 최대인 경우를 찾아야 한다. 3. 비교 대상 중 큰 값은 유지하고, 거리를 줄이면서 그 곱이 최댓값이 되는지 확인한다. 4. 계산에 사용되는 더 작은 값의 인덱스를 바꾸고 반복한다. 4. 코드 import java.io.BufferedReader; impo..
백준 8983 사냥꾼 (Java) 1. 문제 링크 8983번: 사냥꾼 입력의 첫 줄에는 사대의 수 M (1 ≤ M ≤ 100,000), 동물의 수 N (1 ≤ N ≤ 100,000), 사정거리 L (1 ≤ L ≤ 1,000,000,000)이 빈칸을 사이에 두고 주어진다. 두 번째 줄에는 사대의 위치를 나타내는 M개의 x-좌 www.acmicpc.net 2. 문제 및 입출력예제 3. 문제 풀이 1. 이분탐색을 위해 입력받은 사대의 위치들을 정렬한다. 2. 동물마다 이분탐색을 진행하여 사냥이 가능한지 확인한다. 3. 중간 사대 기준으로 해당 사대가 사정거리 내에 있는지 판단한다. 3-1. 사정거리 내에 있다면 true를 리턴한다. 3-2. 사정거리 밖인데 x좌표가 같은 경우 사냥이 불가능하기 때문에 false를 리턴한다. 3-3. 동물이 앞..
백준 14938 서강그라운드 (Java) 1. 문제 링크 14938번: 서강그라운드 예은이는 요즘 가장 인기가 있는 게임 서강그라운드를 즐기고 있다. 서강그라운드는 여러 지역중 하나의 지역에 낙하산을 타고 낙하하여, 그 지역에 떨어져 있는 아이템들을 이용해 서바이벌을 www.acmicpc.net 2. 문제 및 입출력예제 3. 문제 풀이 1. 다익스트라를 이용해 풀었다. 2. 연결 노드를 가면서 저장된 거리보다 작은 경우이면서 수색 범위 안에 있는 노드를 찾는다. 3. 저장된 거리를 갱신하고, 우선순위 큐에 집어 넣는다. 4. 각 지역에서 다익스트라를 진행했을 때 최댓값을 찾아 출력한다. 4. 코드 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStre..
백준 2615 오목 (Java) 1. 문제 링크 2615번: 오목 오목은 바둑판에 검은 바둑알과 흰 바둑알을 교대로 놓아서 겨루는 게임이다. 바둑판에는 19개의 가로줄과 19개의 세로줄이 그려져 있는데 가로줄은 위에서부터 아래로 1번, 2번, ... ,19번의 번호 www.acmicpc.net 2. 문제 및 입출력예제 3. 문제 풀이 1. 바둑이 놓여져 있는 칸에서 팔방탐색을 통해 오목이 만들어지는지 확인한다. 2. 한 방향으로 5칸을 가면서 5칸까지만 같은 색인지 확인하고, 같은 색이면 PriorityQueue에 좌표를 넣는다. 3. 다섯 알 연속이 만들어졌으면 반대 방향 한 칸을 확인해 여섯 알 이상이 되는지 확인한다. 4. 오목이 만들어졌다면 PriorityQueue에서 정렬된 좌상단 위치를 저장한다. 4. 코드 import ja..
백준 17218 비밀번호 만들기 (Java) 1. 문제 링크 2666번: 벽장문의 이동 첫 번째 줄에 벽장의 개수를 나타내는 3보다 크고 20보다 작거나 같은 하나의 정수, 두 번째 줄에 초기에 열려있는 두 개의 벽장을 나타내는 두 개의 정수, 그리고 세 번째 줄에는 사용할 벽장들 www.acmicpc.net 2. 문제 및 입출력예제 3. 문제 풀이 1. dp 이차원 배열을 만들어 현재 위치까지의 최장길이를 저장한다. 2. 뒤에서부터 둘 중 하나를 다 읽을때까지 반복한다. 2-1. 현재 두 인덱스에서의 값이 동일할 경우 결과 앞에 더하고 각 인덱스 값에 1을 뺀다. 2-2. 같지 않은 경우에는 dp배열에서의 값이 작은 문자열 길이 인덱스 값에서 1을 뺀다. 4. 코드 import java.io.BufferedReader; import java.io..
백준 2666 벽장문의 이동 (Java) 1. 문제 링크 2666번: 벽장문의 이동 첫 번째 줄에 벽장의 개수를 나타내는 3보다 크고 20보다 작거나 같은 하나의 정수, 두 번째 줄에 초기에 열려있는 두 개의 벽장을 나타내는 두 개의 정수, 그리고 세 번째 줄에는 사용할 벽장들 www.acmicpc.net 2. 문제 및 입출력예제 3. 문제 풀이 1. 열러 있는 두 곳의 위치와 사용 벽장 위치, 총 이동 횟수로 DFS 탐색을 진행한다. 2. 이동 횟수가 결과 보다 크다면 끝낸다. 3. 마지막 벽장까지 다 사용했다면 결과와 이동 횟수 중 작은 값을 결과로 저장한다. 4. 왼쪽 벽장을 사용 벽장으로 정한 경우와 왼쪽 벽장을 사용 벽장으로 정한 경우 각각으로 DFS 탐색을 진행한다. 4. 코드 import java.io.BufferedReader; ..
백준 17836 공주님을 구해라! (Java) 1. 문제 링크 17836번: 공주님을 구해라! 용사는 마왕이 숨겨놓은 공주님을 구하기 위해 (N, M) 크기의 성 입구 (1,1)으로 들어왔다. 마왕은 용사가 공주를 찾지 못하도록 성의 여러 군데 마법 벽을 세워놓았다. 용사는 현재의 가지고 있는 www.acmicpc.net 2. 문제 및 입출력예제 3. 문제 풀이 1. 저주 제한 시간 동안 BFS 탐색으로 사방탐색을 한다. 2. 빈 공간이라면 가서 큐에 넣고 방문처리한다. 3. 무기가 있는 곳이라면 큐에 좌표와 1(무기 소지)을 넣고 방문처리한다. 4. 벽이라면 큐에서 꺼낸 배열의 마지막 값이 1인 경우에만 큐에 넣고 방문처리한다. 5. 저주 시간 안에 공주에 도착하면 도달 시간을 출력하고, 도착하지 못하면 Fail을 출력한다. 4. 코드 import..
백준 16197 두 동전 (Java) 1. 문제 링크 16197번: 두 동전 N×M 크기의 보드와 4개의 버튼으로 이루어진 게임이 있다. 보드는 1×1크기의 정사각형 칸으로 나누어져 있고, 각각의 칸은 비어있거나, 벽이다. 두 개의 빈 칸에는 동전이 하나씩 놓여져 있고, www.acmicpc.net 2. 문제 및 입출력예제 3. 문제 풀이 1. 주어진 보드를 입력받으면서 동전을 따로 저장한다. 2. BFS 탐색을 이용하여 최소 횟수를 구한다. 3. 현재 동전 2개를 큐에 넣고, 해시값으로 방문처리를 진행했다. 4. 큐에서 꺼낸 동전들을 각각 사방탐색을 진행한다. 4-1. 1번 동전만 떨어진 경우와 2번 동전만 떨어진 경우 종료해야 하기 대문에 현재 횟수를 리턴한다. 4-2. 두 동전이 다 떨어진 경우나, 둘 다 벽으로 간다면 넘어간다. 4-..