자료구조와 알고리즘/문제풀기
-
백준 9095 - 1,2,3 더하기자료구조와 알고리즘/문제풀기 2023. 4. 13. 23:56
정수 N을 1,2,3의 합으로 나타내는 방법의 수를 구하는 문제이다. -먼저 상태와 가장 작은문제를 종료하기 위한 조건을 생각해보자: 상태: N ,종료조건: ? (종료조건 ->더 이상 재귀호출하지않고 이전 호출로 return 시작) 점화식을 만들면서 종료조건을 생각해보자. 문제를 해결하면서 변하지 않는 값 -> 각 수를 만드는 경우의 수 가령 1 => 1개, 2 = 1+1, 2 두개 , 3 = 1+1+1, 1+2, 2+1, 3 4개 등등의 경우의 수는 다른 N을 구하는 과정에서 나오더라도 변하지 않을 것이다. 점화식 N이라는 숫자를 만들기 위해 1,2,3만을 이용해야한다면, N = N-1 +1 = N-2 +2 = N-3 +3 꼴 일 것이다. 예제의 4를 보면 4 = 1+3, 2+2 등으로 표현할 수 있는..
-
백준 1463 - 1로 만들기자료구조와 알고리즘/문제풀기 2023. 4. 13. 23:20
정수 N이 주어졌을 때, 세가지 방법의 연산으로 1로만드는 최소 방법의 수를 구하는 문제이다. 먼저 상태와 가장 작은문제를 종료하기 위한 조건은 직관적이다 --> 상태 :N , 종료조건 N ==1 이제 문제를 풀기위한 점화식을 생각해보자. 먼저, 큰 문제 D[N]을 작은 문제로 쪼개서 생각해보자. (D[N] => N을 만드는 가장 최소의 경우의 수 return) **계산하는 과정에서 변하지 않는것 -> 각 수를 최소방법으로 1로만드는 경우의 수 ex D[2] : 2 ->1 (/2) ,D[3] :3 -> 1 (/3) , D[4] : 4 -> 2 -> 1 (/2) **기억해야할 것 : 각 단계에서 1로만드는 최소의 경우의 수 그렇다면 D[N]을 최소의 경우로 1로만드는 조건은 N을 -> N/3 or N/2 ..
-
백준 17087 - 숨바꼭질 6자료구조와 알고리즘/문제풀기 2023. 4. 10. 22:40
-해결방법 수빈이는 d나 -d로만 움직일 수 있고, 동생들은 자유로운 위치에 있다. 동생이 어떤 위치에 있을 때 D씩 움직여서 잡으려면, 동생은 수빈이와 위치에서 D의 배수만큼 떨어진 자리에 있어야한다. 가령 수빈이가 2에 있고, 동생이 10에 있다면, 수빈이는 2씩 혹은 4씩 움직여야 10에 도달할 수 있다. D가 3이나 5면 수빈이는 절대 10에 갈 수 없을 것이다. 즉 모든 동생들은 수빈이와의 위치와 차이에서 D의 배수만큼의 위치에 있어야 수빈이가 D씩 움직여서 모두 잡을 수 있다. -1. 수빈이와 동생의 위치의 차이를 구한다. -2. 위치의 차이들의 최대공약수를 구한다. public class Main { public static void main(String[] args) throws Excep..
-
백준 9613 - GCD의 합자료구조와 알고리즘/문제풀기 2023. 4. 10. 22:22
public class Main { public static void main(String[] args) throws Exception { BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int t = Integer.parseInt(br.readLine()); String[] input; while (t-- > 0) { input = br.readLine().split(" "); Long sum = 0L; for (int i = 1; i < input.length; i++) { for (..
-
백준 10872,1676 - 팩토리얼, 팩토리얼 0의 개수자료구조와 알고리즘/문제풀기 2023. 4. 10. 22:19
팩토리얼 public class Main { public static void main(String[] args) throws Exception { BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); //스캐너보다 성능 나음 int t = Integer.parseInt(br.readLine()); Long a = fac(t); bw.write(a+""); bw.flush(); bw.close(); } private static Long fac(int t) { if(t ==0) return 1..
-
백준 6588 - 골드바흐의 추측자료구조와 알고리즘/문제풀기 2023. 4. 10. 21:57
-해결방법 1. 숫자 N을 입력 받고 N이하의 소수 중에서 만족하는 숫자를 찾는다 2 만족하는 숫자를 찾는 방법 2.1 2중 for문을 돌면서 전부 비교하기 - N이하의 소수 중 가장 작은 소수와 가장 큰 소수를 더 해본다. -true -> a+b를 출력하고 break -false -> 다음으로 큰 소수를 ..그 다음 소수 반복 그래도 찾지 못하면, 그다음 작은 소수와 가장 큰 소수를 더 해본다. int[] primeNumber // 2~M 이하의 소수를 담은 배열 for(int i=0; i=i; j--){ if(m - primeNumber[0] - primeNumber[j] == 0){ System.out.println(//); break; } } } 이를 모든 테스트 케이스에서 반복하면 될 수 있다...
-
백준 1929번 - 소수 구하기자료구조와 알고리즘/문제풀기 2023. 4. 10. 19:46
M이상 N이하의 소수를 모두 출력하는 프로그램을 작성하면 된다. public class Main{ public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String[] input = br.readLine().split(" "); int m = Integer.valueOf(input[0]); int n = Integer.valueOf(input[1]); boolean[] isPrime = new boolean[n + 1]; isPrime[0]=isPrime[1]=true; for (int i = 2; i
-
백준 1978 - 소수 찾기자료구조와 알고리즘/문제풀기 2023. 4. 10. 19:11
주어진 N개의 수 중에서 소수가 몇 개인지 찾아서 출력하는 문제이다. public class Main{ public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); int size = Integer.parseInt(br.readLine()); String[] input = br.readLine().split(" "); int n; int counter=0; for (int i = 0; i < siz..