본문 바로가기
반응형

알고리즘 PS113

[백준] 1003번 - 피보나치 함수 (Java) https://www.acmicpc.net/problem/1003 1003번: 피보나치 함수 각 테스트 케이스마다 0이 출력되는 횟수와 1이 출력되는 횟수를 공백으로 구분해서 출력한다. www.acmicpc.net 1. DP 테이블의 성격 정의 - DP[N][2]로 생성해서 DP[i][0]에는 0의 출력 횟수, DP[i][1]에는 1의 출력 횟수를 저장한다. - N 2022. 9. 27.
[백준] 1463번 - 1로 만들기 (Java) https://www.acmicpc.net/problem/1463 1463번: 1로 만들기 첫째 줄에 1보다 크거나 같고, 106보다 작거나 같은 정수 N이 주어진다. www.acmicpc.net DP(Dynamic Programming) 문제 푸는 공식 3단계 1) DP 테이블 정의 2) 점화식 찾기 3) 초기값 정하기 1. 테이블 정의 DP[i] = 정수 i를 1로 만들때까지 걸리는 연산 횟수의 최소값 2. 점화식 찾기 DP[12]의 경우 a. 3으로 나눌 경우 -> DP[12] = DP[4] + 1 -> DP[x] = DP[x/3] + 1 b. 2로 나눌 경우 -> DP[12] = DP[6] + 1 -> DP[x] = DP[x/2] + 1 c. 1을 뺄경우 -> DP[12] = DP[11] + 1 .. 2022. 9. 26.
이분탐색 알고리즘(Upper Bound, Lower Bound) 오름차순으로 정렬된 배열에서 찾고자 하는 값 key가 있을 때, Upper Bound는 key보다 큰 첫번째 위치(초과)를 반환한다. Lower Bound는 key보다 크거나 같은 첫번째 위치(이상)블 반환한다. 예) 배열 {1, 3, 3, 5, 7}이 있을 때, key = 3이면 Upper Bound = 3(인덱스), Lower Bound = 1(인덱스)가 된다. key = 2이면 Upper Bound = 1(인덱스), Lower Bound = 1(인덱스)가 된다. lower bound, 하한은 찾고자 하는 값 '이상'의 값이 처음으로 나타나는 위치를 의미한다. 즉, 왼쪽부터 볼 때 찾고자 하는 값이 같거나 큰 경우를 처음 만나는 위치를 의미한다. key 값이 4일 때 처음 마주하는 키 값 이상을 갖고.. 2022. 9. 22.
[백준] 1920번 - 수 찾기 (Java)(○) https://www.acmicpc.net/problem/1920 1920번: 수 찾기 첫째 줄에 자연수 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 줄에는 N개의 정수 A[1], A[2], …, A[N]이 주어진다. 다음 줄에는 M(1 ≤ M ≤ 100,000)이 주어진다. 다음 줄에는 M개의 수들이 주어지는데, 이 수들 www.acmicpc.net 선형탐색으로 풀면 시간초과가 발생한다. 이분탐색으로 풀어보자. 1. N개의 수를 입력받아서 오름차순으로 정렬을 해야 한다. 2. M의 수를 하나씩 이분탐색으로 찾아보자. import java.util.*; import java.io.*; /* [백준] 1920번 - 수 찾기 (Java) */ public class Main { static int N.. 2022. 9. 22.
Java의 자료구조 사용법 1. HashMap // key:String, data: Integer으로 선언 HashMap map = new HashMap(); // 값 삽입하기 for (String key : A) { map.put(key, map.getOrDefault(key, 0)+1); // key를 찾아서 그 값을 읽어서 +1해서 다시 입력하기. } // map에서 각 키의 값을 읽어서 제일 큰 수인 key를 고르는 구문 for (String key : map.keySet()) { if (map.get(key) > max) { max = map.get(key); ans = key; } } 2022. 9. 22.
[백준] 9935번 - 문자열 폭발 (Java) 1. 문자열을 폭발문자열로 split 한 다음 머지하자. 2. 머지한 문자열을 다시 재귀호출하자. 2-1. 문자열에서 폭발문자열이 없으면 문자열 리턴 2-1. 문자열의 사이즈가 0이면 "FRULA"리턴 import java.util.*; import java.io.*; /* [백준] 9935번 - 문자열 폭발 (Java) */ public class Main { static String str, bom; void InputData() { Scanner in = new Scanner(System.in); str = in.next(); bom = in.next(); } String DFS(String s) { if (!s.contains(bom)) { if (s.length() == 0) return "FR.. 2022. 9. 21.
[백준] 14490번 - 백대열 (Java) 문자열을 split 해서 분리하는 것과 최대공약수를 구하는 법을 알아야 한다. 최대공약수는 유클리드 호제법을 이용해서 구현했다. import java.util.*; import java.io.*; /* [백준] 14490번 - 백대열 (Java) */ public class Main { static int N, number; static int A[]; void InputData() { Scanner in = new Scanner(System.in); //N = in.nextInt(); String str = in.next(); String s[] = str.split(":"); A = new int[2]; for (int i=0; i 2022. 9. 21.
[백준] 11720번 - 숫자의 합 (Java) (방법 #1) 숫자가 문자열 한개로 입력된다. 입력 받은 문자열을 char 배열로 잘라서 정수형 배열에 나눠 담아야 한다. 나눠담은 정수형 배열을 순차적으로 더하면 된다. (방법 #2) 정수 하나로 받아서 MOD를 사용해서 각 자리수를 계산할 수 있다. import java.util.*; import java.io.*; /* [백준] 11720번 - 숫자의 합 (Java) */ public class Main { static int N, number; static int A[]; void InputData() { Scanner in = new Scanner(System.in); N = in.nextInt(); String str = in.next(); A = new int[N]; for (int i=0; i 2022. 9. 21.
코드 스니펫 1. class 객체 배열의 정렬 - point의 값을 기준으로 오름차순 정렬 class Build implements Comparable { int point; int height; Build (int p, int h) { this.point = p; this.height = h; } @Override public int compareTo (Build o) { return this.point - o.point; } } Arrays.sort(A); 2. 정수를 한자리씩 분리하는 방법 int Mod(int sum) { int mod = 1; for (int i=1; i 0) { sum += number/mod; // 제일 앞자리를 떼서 더한다. number = number%mod; // 앞자리를 떼고 나머.. 2022. 9. 21.
반응형