목록CodingTest (430)
기록방
👉 문제링크🔸 문제 분석 🔸공격을 먼저했을 때와 회피를 먼저 했을 때 중에서 아드레날린의 최대값을 찾는다.🔸 문제 풀이 🔸Ki가 1보다 크면 Ai에 곱하고, 1이하면 Bi에 곱하면 최대값을 구할 수 있다.Ki가 소수점 아래 첫째 자리까지 주어지는데, 소숫점 계산에 유의해야 한다.🔸 코드 🔸import java.io.*;import java.util.StringTokenizer;public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); Buffere..
👉 문제링크🔸 문제 분석 🔸입력된 수가 회문인 수(팰린드롬; palindrome) 인지 확인한다.2부터 64 까지 기수 변환 시 회문인 수이면 1을, 아니라면 0을 반환한다.🔸 문제 풀이 🔸회문을 확인하기 위해 문자열 대칭 메서드를 구현한다.64 자리 까지의 기수 변환을 구현한다.Integer.toString(숫자, 기수) 메서드는 최대 32 자리 기수 변환을 지원하기 때문에, 64 자리 까지 변환이 가능한 메서드를 직접 구현한다.기수 변환을 위해 64개의 변환을 위한 문자가 필요하다.🔸 코드 🔸import java.io.*;public class Main { private static final String DIGITS = "0123456789abcdefghijklmnopqrstuvw..
👉 문제링크🔸 문제 분석 🔸1번 도시부터 다른 도시로 가는 K번째 최단 거리를 구해야 한다.K번째 최단 경로가 없으면 -1 출력한다.🔸 문제 풀이 🔸한 노드부터 다른 노드까지의 최단 거리를 구하므로, 다익스트라 (Dijkstra) 알고리즘을 선택한다.일반적인 다익스트라와 다르게, 거리를 업데이트이트 하지 않고 우선 순위 큐에 다시 넣는다.무한 순환 혹은 너무 많은 원소가 생기지 않도록, K개 까지만 거리를 구한다.🔸 코드 🔸import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.IOException;import java.io.InputStreamReader;import java.io.OutputStreamWrite..
👉 문제링크 🔸 문제 분석 🔸N개의 도시 사이 M개의 도로가 주어진다. 각 도로를 건너는 시간이 있고, 출발지와 도착지가 주어진다.도로는 출발지부터 도착지까지 단방향 비순환 그래프이다.많은 경로 중에 가장 늦게 도착하는 경로에서 지나는 도로의 수 총합을 출력한다.🔸 문제 풀이 🔸출발지부터 도착지까지 단방향 비순환 그래프이므로, 위상 정렬(Topology Sort)을 통해 최대값을 구할 수 있다.건너온 경로의 수를 카운트 해야하므로 역방향 탐색이 필요하다.1분도 쉬지 않고 달린 경로이므로 현재 시간과 도로의 소요 시간의 차이가 맞아 떨어져야 한다.경로를 중복되게 체크하지 않기 위해서 도시를 방문처리 한다.🔸 코드 🔸import java.io.*;import java.util.ArrayDeque..
👉 문제링크🔸 문제 분석 🔸스타크레프트 같은 게임에서 각 건물을 짓는데 필요한 최소 시간을 구해보자.N개의 건물 별 짓는 시간과 먼저 지어져야 하는 건물의 번호가 주어진다.🔸 문제 풀이 🔸선행 되어야 하는 번호가 주어지므로 위상 정렬(Topology Sort)을 활용해 풀이할 수 있다.선행 건물 건설 직후 해당 건물을 짓는데, 선행 건물이 여러개일 경우 순서를 정할 수 없다.따라서 선행 건물이 지어지는 시간의 최대값 + 현재 건물을 짓는 시간을 구한다.🔸 코드 🔸import java.io.*;import java.util.ArrayDeque;import java.util.ArrayList;import java.util.Queue;import java.util.StringTokenizer;pu..