목록전체 글 (57)
열심히 코딩 하숭!
https://www.acmicpc.net/problem/10250 10250번: ACM 호텔 프로그램은 표준 입력에서 입력 데이터를 받는다. 프로그램의 입력은 T 개의 테스트 데이터로 이루어져 있는데 T 는 입력의 맨 첫 줄에 주어진다. 각 테스트 데이터는 한 행으로서 H, W, N, 세 정수 www.acmicpc.net 복잡해보이지만, 간단한 문제다. 나머지와 몫 연산만 잘 하면 된다! 풀이 #include using namespace std; int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); int T, H, W, N; cin >> T; for (int i = 0; i > H >>..
https://www.acmicpc.net/problem/2225 2225번: 합분해 첫째 줄에 답을 1,000,000,000으로 나눈 나머지를 출력한다. www.acmicpc.net 풀이 처음에는 직접 경우의 수를 계산해보며 규칙을 찾아내려고 했는데 그려도 감이 안 왔다... 아놔!!! 그래서 블로그를 참고하여 규칙을 다시 찾아봤다. 표를 쓰면서 확인해야 규칙이 잘 보이는구나... 어쨌든 이렇게 이전 열의 값과 이전 행의 값을 더하면 현재 값이 된다! arr[i][j] = arr[i - 1][j] + arr[i][j - 1]; #include using namespace std; int arr[201][201]; int main() { ios_base::sync_with_stdio(false); cin..
https://www.acmicpc.net/problem/9465 9465번: 스티커 첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스의 첫째 줄에는 n (1 ≤ n ≤ 100,000)이 주어진다. 다음 두 줄에는 n개의 정수가 주어지며, 각 정수는 그 위치에 해당하는 스티커의 www.acmicpc.net 풀이 일단 최대한 최소의 경우로 나누어 생각해보았다. - 열 단위로 선택. - 경우의 수: 둘다 선택 X / 1행만 선택 / 2행만 선택. 점화식을 작성하려니까 감이 오지 않아서, 다른 블로그를 참고하게 되었다. 아래의 그림처럼 sticker[0][0]을 선택하는 경우와 sticker[1][0]을 선택하는 경우로 나누어 볼 수 있다. 아래와 같이 생각할 수 있고, 아래의 그림과 같이 0..
https://www.acmicpc.net/problem/17608 17608번: 막대기 아래 그림처럼 높이만 다르고 (같은 높이의 막대기가 있을 수 있음) 모양이 같은 막대기를 일렬로 세운 후, 왼쪽부터 차례로 번호를 붙인다. 각 막대기의 높이는 그림에서 보인 것처럼 순서대로 www.acmicpc.net 풀이 배열로도 풀고 스택으로도 풀었다. 풀이 방법 자체는 유사하고, 단순하게 비교하여 값을 갱신해주는 문제였다! [배열] #include using namespace std; int arr[100000]; int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); int N; cin >> N; for (int i = 0; ..
* 해당 글은 코드 플러스의 '알고리즘 기초' 강의의 내용을 기반으로 작성하였습니다. 다이나믹 프로그래밍 (Dynamic Programming: DP) > == 동적 계획법 > 큰 문제를 작은 문제로 나눠서 푸는 알고리즘 큰 문제를 작은 문제로 나누어서 푸는 방법 2가지 1. 다이나믹 프로그래밍(Dynamic Programming: DP) - 작은 문제들이 중복일 수 있음 2. 분할정복 (Divid & Conqer: D&C) - 작은 문제들이 절대로 중복이 되지 않음 다이나믹 프로그래밍 조건 1. Overlapping Subproblem: 겹치는 부분 문제 - 작은 문제들이 중복이어야 한다 2. Optimal Substructure: 최적 부분 구조 - 문제의 정답을 작은 문제들의 정답을 통해 구할 수 ..
https://www.acmicpc.net/problem/20301 20301번: 반전 요세푸스 첫째 줄에 정수 $N$, $K$, $M$이 주어진다. ($1 \leq N \leq 5\ 000$, $1 \leq K, M \leq N$) www.acmicpc.net 전에 풀었던 요세푸스 문제에 조건이 추가되었다. 풀이 #include #include using namespace std; int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); int N, K, M; cin >> N >> K >> M; deque dq; for (int i = 1; i
https://www.acmicpc.net/problem/1021 1021번: 회전하는 큐 첫째 줄에 큐의 크기 N과 뽑아내려고 하는 수의 개수 M이 주어진다. N은 50보다 작거나 같은 자연수이고, M은 N보다 작거나 같은 자연수이다. 둘째 줄에는 지민이가 뽑아내려고 하는 수의 위치가 www.acmicpc.net 연산의 최솟값을 출력하는 문제이다. 풀이 #include #include using namespace std; int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); int N, M, count = 0; cin >> N >> M; int arr[51]; deque dq; for (int i = 1; i > ar..
https://www.acmicpc.net/problem/1966 1966번: 프린터 큐 여러분도 알다시피 여러분의 프린터 기기는 여러분이 인쇄하고자 하는 문서를 인쇄 명령을 받은 ‘순서대로’, 즉 먼저 요청된 것을 먼저 인쇄한다. 여러 개의 문서가 쌓인다면 Queue 자료구조에 www.acmicpc.net 문제 풀이 문제에서 주어진 내용 그대로 따라갔다! 문서가 처음에 몇 번째 위치에 놓였는지와 문서의 중요도 값은 어떻게 되는지를 한번에 파악하기 위해 pair 클래스를 사용하여 데이터쌍을 만들어서 풀었다. #include #include #include using namespace std; int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); c..
https://www.acmicpc.net/problem/1874 1874번: 스택 수열 1부터 n까지에 수에 대해 차례로 [push, push, push, push, pop, pop, push, push, pop, push, push, pop, pop, pop, pop, pop] 연산을 수행하면 수열 [4, 3, 6, 8, 7, 5, 2, 1]을 얻을 수 있다. www.acmicpc.net 문제 수열이 주어지면, 해당 수열을 스택을 통해 만들 수 있는지 알아내는 문제 주의사항: 모든 값들은 오름차순으로 삽입되어야 함 풀이 도합 3시간 정도만에 겨우 성공했다. 문제가 어렵다기보다는, 내가 이해를 잘못해서 원하는 결과가 잘 안 나왔던 것 같다. 그리고 아쉬웠던 점은, 스택만 이용하여 이것저것 조건을 넣어 ..
https://www.acmicpc.net/problem/1158 1158번: 요세푸스 문제 첫째 줄에 N과 K가 빈 칸을 사이에 두고 순서대로 주어진다. (1 ≤ K ≤ N ≤ 5,000) www.acmicpc.net 문제 요세푸스 문제는 다음과 같다. 1번부터 N번까지 N명의 사람이 원을 이루면서 앉아있고, 양의 정수 K(≤ N)가 주어진다. 이제 순서대로 K번째 사람을 제거한다. 한 사람이 제거되면 남은 사람들로 이루어진 원을 따라 이 과정을 계속해 나간다. 이 과정은 N명의 사람이 모두 제거될 때까지 계속된다. 원에서 사람들이 제거되는 순서를 (N, K)-요세푸스 순열이라고 한다. 예를 들어 (7, 3)-요세푸스 순열은 이다. N과 K가 주어지면 (N, K)-요세푸스 순열을 구하는 프로그램을 작성..