목록수학 (75)
기록방
👉 문제링크🔸 문제 분석 🔸공격을 먼저했을 때와 회피를 먼저 했을 때 중에서 아드레날린의 최대값을 찾는다.🔸 문제 풀이 🔸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..
👉 문제링크🔸 문제 분석 🔸총 m개의 컨테이너가 n개의 칸에 나누어 쌓여져 있다.n개의 각 칸의 컨테이너 높이가 1이하가 되도록 재배치할 때, 최소 이동 횟수를 출력한다.🔸 문제 풀이 🔸컨테이너의 높이를 평탄화 하는 문제이다.가장 먼저 정렬을 n번 수행해서 최대값을 -1 최소값을 +1 하는 방법이 있다n이 최대 10만이므로, 시간 복잡도는 O(n^2logn) 으로 1초를 초과하게 된다.최대힙, 최소힙 두 가지 우선순위 큐로 최대값과 최소값만 빠르게 구하는 방법이 있지만, 이 문제에서는 시간 초과가 나게 된다.그리디 알고리즘으로 효율적으로 계산해야한다.n개의 각 칸에 컨테이너는 결국 평균(m/n)에 수렴하게 된다.여기서 높이차가 1이하인 이유가 나오는데, 평균에 수렴할 때 몇 개의 칸은 평균+1..
👉 문제링크 1644번: 소수의 연속합 첫째 줄에 자연수 N이 주어진다. (1 ≤ N ≤ 4,000,000) www.acmicpc.net 🔸 문제 분석 🔸 정수 N을 연속된 소수의 합으로 만드는 경우의 수를 출력한다. 🔸 문제 풀이 🔸 소수를 구하기 위해 에라토스테네스의 체를 사용한다. 연속된 수의 합에서 경우의 수를 따지므로 투 포인터를 이용해 배열을 이동하며 N이 만들어지는지 확인한다. 🔸 코드 🔸 import java.io.*; import java.util.ArrayList; public class Main { public static void main(String[] args) throws IOException { // Input BufferedReader br = new BufferedRead..
👉 문제링크 27172번: 수 나누기 게임 《보드게임컵》을 준비하다 지친 은하는 보드게임컵 참가자들을 경기장에 몰아넣고 결투를 시키는 게임 《수 나누기 게임》을 만들었습니다. 《수 나누기 게임》의 규칙은 다음과 같습니다. www.acmicpc.net 🔸 문제 분석 🔸 최대 10만개의 서로 다른 수가 적힌 카드가 있다. 이때 수는 1~100만 사이의 정수이다. 카드들을 서로 결투를 벌여서 나누어 떨어지면, 나누는 수는 +1, 나누어진 수는 -1 점을 받는다. 모든 카드들을 결투시켜 최종 점수를 출력한다. 🔸 문제 풀이 🔸 N이 10만이므로 O(NlogN)로 비교하면, 100억번으로 제한 시간인 1초를 초과하게 된다. 에라토스테네스의 체를 활용해서 소수가 아닌, 카드 숫자의 배수 인덱스만 확인해서 결투를 진..