/images/logo.png

[백준]1181 단어 정렬

https://www.acmicpc.net/problem/1181 풀이: 배열에 들어있는 string을 길이 순서로 정렬 후 길이가 같다면, 사전순으로 정렬한다. 이 때, 중복된 문자가 있다면, 제거한다. 코드: 사용언어 : c++ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 #include <iostream>#include <set>#include <string>using namespace std; bool com(string a, string b) { if (a.size() == b.size()) return a < b; return a.size() < b.

[백준]1018 체스판 다시 칠하기

https://www.acmicpc.net/problem/1018 풀이: (0, 0) ~ (8, 8) ….. (n - 8, m - 8) ~ (n, m) 까지의 모든 8 X 8 체스판을 서치한다. 체스판이 WBWBWB… 순서로 되어있는지 확인 후 안되어 있는 칸이 몇 칸인지 찾는다. 찾아낸 수를 C라고 할 때, 64 - C와 C 중 더 작은 값을 저장한다. 저장된 값들 중 가장 작은 값을 출력한다. 코드: 사용언어 : c++ 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 #include <iostream>#include <vector>#include <string>#include <algorithm>using namespace std; int main() { int n, m, c, ma = 64; cin >> n >> m; vector<string> a(n); for (int i = 0; i < n; i++) cin >> a[i]; for (int i = 0; i < n - 7; i++) { for (int t = 0; t < m - 7; t++) { c = 0; for (int y = 0; y < 8; y++) for (int u = 0; u < 8; u++) { bool b = (y % 2) ^ (u % 2) ^ (a[i + y][t + u] == 'B' ?

[백준]2231 분해합

https://www.acmicpc.net/problem/2231 풀이: n - (n의 자릿수 * 9) ~ n 까지의 수 중 n의 생성자를 찾아 출력한다. 없다면 0을 출력 n의 자릿수 * 9를 뺀 수부터 시작하는 이유는 생성자가 n + (n의 각 자릿수의 합) 이므로 각 자릿수의 최댓값인 9를 자릿수 만큼 곱한 후 n에서 빼준 값이 생성자의 최소 조건이 된다. 코드: 사용언어 : c++ 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 #include <iostream>#include <string>using namespace std; int c(int a) { int n = a; while (a) { n += a % 10; a /= 10; } return n; } int main() { string m; bool b = true; cin >> m; int n = stoi(m), a = n - 9 * m.

[C++]lower_bound, upper_bound

lower_bound, upper_bound - 기본적으로 두개 모두 “이진 탐색(Binary Serch)” 기반의 탐색방법 lower_bound 1 lower_bound(arr, arr + n, key); - key 값의 가장 낮은 위치를 찾는다. - key 값이 없다면 key 값보다 큰 가장 작은 정수의 위치를 반환한다. - 반환값이 “iterator” 이다. upper_bound 1 upper_bound(arr, arr + n, key); - key 값을 초과하는 가장 첫번째 원소의 위치. - 반환값이 “iterator” 이다.

[백준]2798 블랙잭

https://www.acmicpc.net/problem/2798 풀이: 3장을 뽑을 수 있는 모든 경우의 수를 확인하여 3장의 합이 M값을 넘지않는 최댓값을 출력한다. 코드: 사용언어 : c++ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 #include <iostream>#include <vector>#include <algorithm>using namespace std; int main() { int n, m, ma = 0; cin >> n >> m; vector<int> a(n, 0); for (int i = 0; i < n; i++) cin >> a[i]; for (int i = 0; i < n - 2; i++) for (int t = i + 1; t < n - 1; t++) for (int y = t + 1; y < n; y++) if (a[i] + a[t] + a[y] <= m) ma = max(ma, a[i] + a[t] + a[y]); cout << ma << endl; return 0; }

[백준]11729 하노이 탑 이동 순서

https://www.acmicpc.net/problem/11729 풀이: https://jyukki97.github.io/blog/2020-02-18-towerofhanoi/ 를 참고 코드: 사용언어 : c++ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 #include <iostream>using namespace std; void h(int n, int a, int b, int c) { if (!n) return; else { h(n - 1, a, c, b); printf("%d %d\n", a, b); h(n - 1, c, b, a); } } int main() { int n, a = 1; cin >> n; for (int i = 0; i < n; i++) a *= 2; cout << a - 1 << endl; h(n, 1, 3, 2); return 0; }