자료구조와 알고리즘
-
여러가지 수학자료구조와 알고리즘/알고리즘 2023. 4. 11. 09:34
나머지 연산: (a+b)%m = ((a%m)+(b%m))%m (a*b)%m = ((a%m)*(b%m))%m (a-b)%m = ((a%m)-(b%m)+m)%m; //음수나머지 나올 수 있다 -> +m한번 해주면 양수로만 나옴 *C(JAVA)와 python 나머지 구하는 방식 차이 c와 java는 나머지를 버림, python은 내림을 이용한다. -GCD,LCM GCD -> 유클리드 호제법 O(logN) //재귀호출 public int getGCD(int a, int b) {if(b == 0) return a; else return getGCD(b,a%b); } //반복문 pulbic int getGCD(int a, int b){ while(b != 0){ int r = a%b; a=b; b=r; } } N개..
-
백준 1373,1212,2089 - 진법변환문제자료구조와 알고리즘/문제풀기 2023. 4. 10. 23:19
1373 2진법 - 8진법 2진법을 3자리씩 끊어서 읽으면 8진법 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)); Stack s = new Stack(); String input = br.readLine(); //숫자가 너무 커서 자료형에 저장 불가 -->문자로 표현해야함 int size = input.length()%3 == 0 ? input.lengt..
-
백준 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..