문제https://www.acmicpc.net/problem/11728 접근 방법간단하게 Arrays.sort로 구하거나, PriorityQueue를 이욯하거나 해서 쉽게 구할 수 있었을 것이다.하지만 투포인터 방법으로 구해보았다.첫번째 배열에서 첫번째 항을 s 두번째 배열에서 첫번째 항을 e 로 두고 작은 부분을 Stringbuilder에 넣어주었다.두 배열중 먼저 끝 지점에 다다를시 배열 하나는 탐색이 다 완료가 되지 않았다는 말로 해당 포인터 부터 나머지 값을 넣어준다.근데 이 투포인터가 가능한 이유는 첫번째 배열과 두번째 배열이 모두 정렬이 되있기 때문에 가능한것이다. 만약 정렬되어 있지 않으면 불가능하다. (ex 첫번째 배열 1,4,2 두번째 배열 3)코드import java.io.Buffere..
문제https://www.acmicpc.net/problem/6219 접근 방법소수를 먼저 B범위 만큼 구해주고, 소수 안에서 D가 포함되어있는지 찾으면 되는 문제이다. 코드import java.io.BufferedReader;import java.io.InputStreamReader;import java.util.Arrays;import java.util.StringTokenizer;public class Main { private static StringBuilder sb; private static BufferedReader br; private static StringTokenizer st; private static int A,B; private static Strin..
문제https://www.acmicpc.net/problem/15996 접근 방법N이 팩토리얼로 주어졌을때 A로 최대 몇승까지 나눌수 있는지에 대한 문제이다.간단하게 N/A + N/(A*A) ...형식으로 K를 구할 수 있다.코드import java.io.BufferedReader;import java.io.InputStreamReader;import java.util.StringTokenizer;public class Main { private static StringBuilder sb; private static BufferedReader br; private static StringTokenizer st; private static long N,A; private stat..
문제https://www.acmicpc.net/problem/9417 접근 방법정수 M이 주어졌을때 모든 두 쌍 중에서 가장 큰 최대공약수를 찾는 문제이다.M이 최대 99이므로 2쌍을 찾을때 완탐을 해도 N*10000의 경우의 수보다 작다.유클리드 호제 방법으로 문제를 쉽게 풀 수 있었다. 코드import java.io.BufferedReader;import java.io.InputStreamReader;import java.util.ArrayList;import java.util.Arrays;import java.util.StringTokenizer;public class Main { private static StringBuilder sb; private static BufferedRead..
문제https://www.acmicpc.net/problem/1990 접근 방법문제에 나와있는대로 소수이면서 팰린드롬을 찾는 문제이다.그러면 먼저 소수를 찾아서 배열을 만들어 주고, A ~ B까지 순환하면서 그 수가 소수인지, 만약 소수이면 팰린드롬 검사를 해줘서 맞으면 모두 저장한다.그리고 마지막은 -1을 저장한다. 코드import java.io.BufferedReader;import java.io.InputStreamReader;import java.util.Arrays;import java.util.StringTokenizer;public class Main { private static StringBuilder sb; private static BufferedReader br; p..
문제https://www.acmicpc.net/problem/23888 접근 방법첫째줄에 A : 첫항, D : 공차둘째줄에 쿼리 갯수(테스트케이스 갯수)셋째줄에 1 L R 또는 2 L R 값으로 첫번째 값이 1이면 L~R 까지 등차수열의 합을 ,2이면 L~R까지 의 최대공약수를 구하는 문제이다.따라서 등차수열의 합은 공식을 이용해서 N*{(2A+(N-1)D}/2, 최대공약수는 유클리드 호제법을 이용하여 구한다. 그리고 2번째에서는 L과 R이 필요가 없는게 A와 A+d, ... A+(N-1)d로 이루어져있기 때문에 첫항과 둘째항의 최대공약수나 둘째나 셋째의 최대공약수나, 셋째나 넷째의 최대공약수나 다 똑같다.(유클리드 호제) 코드import java.io.BufferedReader;import java...
문제https://www.acmicpc.net/problem/1407 접근 방법상당히 애를 먹었던 문제였다. f(n) 정의가 주어지고 a b 자연수가 주어졌을때 f(a)~f(b)를 구하는 문제이다.먼저 2로 한번도 나눌수 없는 개수를 더하고2로 나누어지지만 단 한번만 나누어지는 갯수, 2^2로 나누어지지만 단 한번만 나누어지는 갯수, 2^3...2^4 로나누어지지만 단 한번만 나누어지는 갯수를 더해주었다.아마 위의 접근 방법만 보면 이해가 안될것이다. 예를들어서 먼저 B값이 10 이라고 가정을 해보자. 2번 과정을 해보면10개중 2로 나누어지지 않는 값은 n/2 = 5 개가 될 것이다.f(1) = 2^0f(2) = 2^1 f(3) = 2^0 f(4) = 2^2 f(5) = 2^0 f(6) = 2^1 f..
문제https://www.acmicpc.net/problem/2436 접근 방법최대공약수와 최소공배수가 주어지고, 최대공약수를 만족하는 두 수, 최소공배수를 만족하는 두 수를 구하는 문제이다.따라서 두 수 (A,B) / 최대공약수 = 최소공배수 이므로 A * B = 최대공약수 * 최소공배수이다.최대공약수의 배수를 탐색하며 조건에 맞게 a와 b를 찾아줍니다.코드import java.io.BufferedReader;import java.io.InputStreamReader;import java.util.StringTokenizer;public class Main { private static BufferedReader br; private static StringTokenizer st; p..
문제https://www.acmicpc.net/problem/2725 접근 방법(x,y) 점이 주어졌을 때 0,0 에서 보이는 점의 개수를 구하는 문제입니다.예를들어 (1,1), (2,2), (3,3) 이렇게 3개의 좌표는 같은 선분이므로 보이지 않습니다.따라서 기울기가 겹치지 않는 (기울기의 최대공약수가 1인 선분) 값을 찾아서 두개씩(좌표를 대각선으로 잘랐을때 겹치므로) 더해주면 됩니다.코드import java.io.BufferedReader;import java.io.InputStreamReader;import java.util.StringTokenizer;public class Main { private static StringBuilder sb; private static Buffer..
문제https://www.acmicpc.net/problem/15736 접근 방법청기가 위로 백기가 아래로 있을 때 1번학생은 1번 배수의 깃발을 뒤집고, 2번학생은 2번 배수의 깃발을 뒤집고, 3번은 3의 배수를 뒤집는 방식을 진행된다.맨처음에 어떤깃발이 청기고 어떤 깃발이 백기로 되어있는지 알 수 없어서 헷갈렸지만 밑에 힌트에 맨처음에 다 백기에서 시작된다고 나와있어서 보고 참고했다.1부터 24까지 규칙을 찾아보니 1, 4, 9, 16번의 깃발이 백기인것을 확인했다. N학생의 제곱수가 있으면 그것의 약수는 무조건 홀수이므로 답을 구한다. 완탐방식으로 하면 21억개 이므로 시간 초과가 발생한다.import java.io.BufferedReader;import java.io.InputStreamRead..