본문 바로가기

PS/boj

(29)
[BOJ] 5100 Jean and Joe’s Clothes 문제 링크 www.acmicpc.net/problem/5100 풀이 각 테스트 케이스마다 한 줄에 5개의 수를 출력해야 한다. 첫 번째는 Joe로, 'M' 또는 'L'일 경우에 카운팅한다. 두 번째는 Jean으로, 12 이상일 경우에 카운팅한다. 세 번째는 Jane으로, 12 미만일 경우에 카운팅한다. 네 번째는 James로, 'S'일 경우에 카운팅한다. 다섯 번째는 아무 것도 해당되지 않는 경우로, 'X'일 경우에 카운팅한다. Java 코드 더보기 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Arrays; import java.util.stream.Co..
[BOJ] 20743 Bus Numbers 문제 링크 www.acmicpc.net/problem/20743 풀이 $m$의 최댓값이 40만이므로, 어떤 정수 $x^3+y^3$이 40만 이하인 모든 경우에 대해 생성하여 개수를 센다. 그렇게 2개 이상의 서로 다른 방법으로 나타낼 수 있는 수가 우리가 찾는 정답이다. Java 코드 더보기 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class Main { public static void main(String[] args) throws IOException { BufferedReader in = new BufferedReader(new InputStreamReader(..
[BOJ] 8711 Odchudzanie 문제 링크 www.acmicpc.net/problem/8711 풀이 naive하게는 $i$번째 인덱스에서 그 뒤에 있는 모든 인덱스 $j$에 대해서 $w_i - w_j$의 최댓값을 구하는 방법이 있다. 이 경우 시간복잡도는 $O(n^2)$이며, 시간 내에 풀 수 없다. 이 문제는 다음과 같은 아이디어로 풀 수 있다. 앞에서부터 쭉 훑다가 지금까지 나온 값 중 가장 큰 값이 나온 상황을 가정하자. 그러면 지금까지 나온 값은 무시하고 최댓값을 선택하는 게 이득이다. $i < j$이고 $w_i - w_j$에서 $w_i$가 크면 클 수록 최적이기 때문이다. 새로운 최댓값이 나왔다면 그 이후부터 등장하는 최솟값을 찾아야 한다. 그 이전에 등장한 최솟값은 쓸모가 없어지기 때문이다. 이런 방식으로 풀면 시간복잡도는 ..
[BOJ] 19774 ABCD-код 문제 링크 www.acmicpc.net/problem/19774 풀이 입력받은 4자리의 수를 2자리씩 끊어서 제곱하고 더해야 한다. 이는 각각 100으로 나눈 몫과 나머지를 통해 구할 수 있다. Java 코드 더보기 import java.io.*; public class Main { public static void main(String[] args) throws IOException { BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); int T = Integer.parseInt(in.readLine()); StringBuilder out = new StringBuilder(); while (T-- > 0) { int n..
[BOJ] 8965 Circular Sequence 문제 링크 www.acmicpc.net/problem/8965 풀이 문자열로 만들 수 있는 모든 경우의 수에 대해 어떤 경우가 가장 사전순으로 앞서는지 구하면 된다. Java 코드 더보기 import java.io.*; public class Main { public static void main(String[] args) throws IOException { BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); int T = Integer.parseInt(in.readLine()); StringBuilder out = new StringBuilder(); while (T-- > 0) { String s = in.readLin..
[BOJ] 12779 상품 is 뭔들 문제 링크 www.acmicpc.net/problem/12779 풀이 약수의 개수가 홀수라는 뜻은 어떤 자연수를 제곱한 제곱수라는 뜻이다. 따라서, $a$와 $b$ 사이에 존재하는 제곱수의 개수를 세면 된다. Java 코드 더보기 import java.io.*; import java.util.StringTokenizer; public class Main { static long gcd(long a, long b) { return b > 0 ? gcd(b, a % b) : a; } public static void main(String[] args) throws IOException { BufferedReader in = new BufferedReader(new InputStreamReader(System..
[BOJ] 13430 합 구하기 문제 링크 www.acmicpc.net/problem/13430 풀이 $S$는 다음과 같다. $$ \begin{aligned} S(0, n) &= n\\ S(1, n) &= \sum_{i=1}^{n} i\\ &= \frac{n(n+1)}{2} \\ S(2, n) &= \sum_{i=1}^{n} \frac{i(i+1)}{2}\\ &= \frac{n(n+1)(n+2)}{6}\\ S(3, n) &= \sum_{i=1}^{n} \frac{i(i+1)(i+2)}{6}\\ &= \frac{n(n+1)(n+2)(n+3)}{24}\\ \end{aligned} $$ $S(k, n) = \frac{n(n+1)(n+2)\cdots(n+k)}{(k+1)!}$이라는 규칙은 보이는데, 실제로 성립하는 것을 보이려면 어떻게 해야 ..
[BOJ] 4197 Logo 문제 링크 www.acmicpc.net/problem/4197 풀이 위 그림은 2차원 좌표평면에서 $x$축 방향과 이루는 각도가 $\theta$인 상태에서 $x$만큼 걸어가는 경우이다. 그러면 변위는 다음과 같다. $$ \begin{aligned} \Delta x &= a \cos \theta\\ \Delta y &= a \sin \theta \end{aligned} $$ 따라서, $x$축 방향과 이루는 각도를 누적하면서 변위만큼 갱신하고 처음 위치와의 거리를 구하면 된다. Java 코드 더보기 import java.io.*; import java.util.StringTokenizer; public class Main { public static void main(String[] args) throws ..