목록전체 글 (59)
열심히 코딩 하숭!

https://www.acmicpc.net/problem/1181 1181번: 단어 정렬 첫째 줄에 단어의 개수 N이 주어진다. (1 ≤ N ≤ 20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주어진다. 주어지는 문자열의 길이는 50을 넘지 않는다. www.acmicpc.net 풀이 1. string을 받아서 2. 중복은 제거하고 -> set 자료구조 사용 3. 길이를 비교한 후 -> set에 Compare 4. 길이가 같으면 사전 순으로 배열시키고 5. 출력시켜야한다. 아이디어는 떠올랐으나, set 함수를 내가 원하는 조건에 맞게 정렬하는 방법을 모르겠어서, 해당 부분은 블로그를 참고하였다. (참고한 블로그: https://retn0.tistory.com/5..

https://www.acmicpc.net/problem/11399 11399번: ATM 첫째 줄에 사람의 수 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄에는 각 사람이 돈을 인출하는데 걸리는 시간 Pi가 주어진다. (1 ≤ Pi ≤ 1,000) www.acmicpc.net 계속 더해가면서 합을 구해야한다. (이걸 뭐라고 하더라? 등차수열은 아니고 아무튼 계속 더해나가야 함) 그러므로, 반복되는 값들이 최소가 되도록 해줘야 함. -> 오름차순으로 정렬한 후, 더해주기. 오름차순은 sort 함수를 이용했다. 풀이 #include #include using namespace std; int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout..

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..