일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
- TDD
- 개발공부
- 쿼리
- 컴퓨터
- 리눅스
- CS
- JDBC
- 명령어
- dbms
- 시스템프로그래밍
- 데브옵스
- 데이터베이스프로그래밍
- 서버
- 오라클
- Database
- 쿼리최적화
- 클라우드네이티브
- AWS
- 공부
- EC2
- sql
- 데이터베이스
- 개발자
- 클라우드
- 트랜잭션
- jdbc programming
- 개발방법론
- 리눅스공부
- DB
- 자바
- Today
- Total
목록프로그래밍/백준 문제풀이 (26)
개발 블로그
https://www.acmicpc.net/problem/1182 1182번: 부분수열의 합 첫째 줄에 정수의 개수를 나타내는 N과 정수 S가 주어진다. (1 ≤ N ≤ 20, |S| ≤ 1,000,000) 둘째 줄에 N개의 정수가 빈 칸을 사이에 두고 주어진다. 주어지는 정수의 절댓값은 100,000을 넘지 않는다. www.acmicpc.net 이 문제는 멱집합을 구하는 알고리즘을 조금 변형하면 풀 수 있다. k번 째 원소를 뽑거나 안 뽑거나에 따라 합이 달라진다. k번째 원소를 합한 값, 합하지 않은 값을 넘겨 재귀호출한다. import java.util.*; public class Main { static int powerSet(int[] arr, int s, int target, int k) { ..
https://www.acmicpc.net/problem/10974 10974번: 모든 순열 N이 주어졌을 때, 1부터 N까지의 수로 이루어진 순열을 사전순으로 출력하는 프로그램을 작성하시오. www.acmicpc.net 이 문제는 모든 순열을 출력하는 문제다. 원소가 1부터 증가하는 정수이기 때문에 배열 말고 for문을 이용하였다. import java.util.*; public class Main { public static void pick(int a[], int m, int toPick) { if(toPick==0) { for(int i=0; i
https://www.acmicpc.net/problem/10973 10973번: 이전 순열 첫째 줄에 입력으로 주어진 순열의 이전에 오는 순열을 출력한다. 만약, 사전순으로 가장 처음에 오는 순열인 경우에는 -1을 출력한다. www.acmicpc.net 이전에 풀었던 다음 순열 문제를 조금만 변형하면 되는 문제다. 전체적인 알고리즘 논리는 같다. 부등호 방향만 반대로 해주면 된다. import java.util.*; public class Main { public static void swap(int [] a, int i, int j) { int temp = a[i]; a[i] = a[j]; a[j] = temp; } public static boolean nextPermutation(int[] a) ..
https://www.acmicpc.net/problem/10972 10972번: 다음 순열 첫째 줄에 입력으로 주어진 순열의 다음에 오는 순열을 출력한다. 만약, 사전순으로 마지막에 오는 순열인 경우에는 -1을 출력한다. www.acmicpc.net 어떤 순열이 주어지면 사전순으로 다음에 오는 순열을 구하는 문제이다. 알고리즘 분류는 수학과 조합론이다. 1 2 3 4 1 2 4 3 1 3 2 4 ... 1) 배열의 끝부터 a[i] > a[i-1] 인 구간을 찾는다. 2) a[i-1]과 a[i...last]까지 중 가장 작은 값의 자리를 바꾼다. 이때 a[i...last]는 내림차순으로 정렬되어있으므로 (-> 1전 과정을 찾기 전까지는 a[i] 0 && a[i-1] >= a[i]) { i--; } // ..
https://www.acmicpc.net/problem/9095 9095번: 1, 2, 3 더하기 각 테스트 케이스마다, n을 1, 2, 3의 합으로 나타내는 방법의 수를 출력한다. www.acmicpc.net 이 문제는 조금 어려웠던 것 같다. 알고리즘 분류는 다이나믹 프로그래밍이다. 다이나믹 프로그래밍이란 특정 범위까지의 값을 구하기 위해서 그것과 다른 범위까지의 값을 이용하여 효율적으로 값을 구하는 알고리즘 설계 기법이다. 1 = 1 (1개) 2 = 1 + 1 = 2 (2개) 3 = 1 + 1 + 1 = 1 + 2 = 2 + 1 = 3 (4개) 4 = 1 + 1 + 1 + 1 = 1 + 1 + 2 = 1 + 2 + 1 = 2 + 1 + 1 = 2 + 2 = 1 + 3 = 3 + 1(7개) n을 1..
https://www.acmicpc.net/problem/1748 1748번: 수 이어 쓰기 1 첫째 줄에 N(1 ≤ N ≤ 100,000,000)이 주어진다. www.acmicpc.net 이 문제는 노트에 좀 써보면 알고리즘을 찾기 쉬웠던 것 같다. N을 입력 받고 N의 자릿수를 구해준다. N의 자릿수를 l이라고 두고 풀었다. N까지 한 자리 수: 9개 //1~9 두 자리 수: 90개 //10~99 세 자리 수: 900개 //100~999 ... l-1자리 수 : 9*(10^(l-2))개 //100...0~999..9 그리고 l 자리수는 N-(10^(l-1))+1개 있다. import java.util.*; public class Main { public static void main(String[] ..