/images/logo.png

[백준]1015 수열 정렬

https://www.acmicpc.net/problem/1015 풀이: 배열 A를 정렬한 배열을 배열 B라고 하자. 현재 위치가 i 일 때, A[i] 값이 배열 B의 어디에 위치해 있는지 찾아서 출력한다. ex) A 2 3 1 B 1 2 3 답: 1 2 0 수의 중복이 있을 수 있으므로 주의하자. 코드: 사용언어 : c++ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 #include <iostream>#include <algorithm>using namespace std; int N, a[52], b[52], d[52], c; int main(void) { cin >> N; for (int i = 0; i < N; i++) { cin >> a[i]; b[i] = a[i]; } sort(a, a + N); for (int i = 0; i < N; i++) { c = lower_bound(a, a + N, b[i]) - a; while (d[c]) c++; cout << c << " "; d[c] = 1; } cout << endl; }

[백준]1024 수열의 합

https://www.acmicpc.net/problem/1024 풀이: 길이가 적어도 L인 수열은 다음과 같이 나타낼 수 있다. 1 n n + 1 n + 2 ... n + L - 2 n + L - 1 즉, 길이가 L인 수열들의 합은 L * n + Σ k (k = 1 ~ L - 1) = N ( N - Σ k (k = 1 ~ L - 1) ) % L == 0

[백준]1051 숫자 정사각형

https://www.acmicpc.net/problem/1051 풀이: N, M 중 더 작은 값이 정사각형의 한 변의 길이의 최댓값이 된다. 최댓값을 1씩 줄여 가면서, 만들 수 있는 정사각형이 있는지 확인한다. 만들 수 있다면, 반복을 중지하고, 변을 제곱한 넓이를 출력한다. 코드: 사용언어 : c++ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 #include <iostream>#include <vector>using namespace std; int N, M, b, c = 1; int main(void) { cin >> N >> M; vector<string> a(N); for (int i = 0; i < N; i++) cin >> a[i]; b = N > M ?

[백준]1062 가르침

https://www.acmicpc.net/problem/1062 풀이: a ~ z 중에 K개의 글자를 배웠을 떄, N개의 단어 중 몇개의 단어를 읽을 수 있는지 구한 후 그것들 중 최댓값을 출력한다. a, c, i, n, t 다섯개의 글자는 무조건 들어가므로 넣고 시작하자. 코드: 사용언어 : 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 29 30 31 #include <iostream>#include <vector>#include <algorithm>using namespace std; int N, K, b, c = 0, d, f; vector<string> a; void T(int x, int y) { if (y == K) { d = 0; for (int i = 0; i < N; i++) { f = 1; for (char s : a[i]) if (!

[백준]1080 행렬

https://www.acmicpc.net/problem/1080 풀이: (0, 0) 부터 하나씩 비교해 나간다. 만약 A 와 B 의 숫자가 다르다면, 현재 위치부터 3 * 3 전체를 반전시킨다. 반전 시켰다면, 뒤집은 횟수를 +1 해준다. 순환이 끝난 후 행렬 A 와 B 가 다르다면 -1을 같다면 뒤집은 횟수를 출력해준다. 코드: 사용언어 : c++ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 #include <iostream>#include <vector>using namespace std; int N, M, c = 0, i, t, u, y; int main() { cin >> N >> M; vector<string> a(N), b(N); for (i = 0; i < N; i++) cin >> a[i]; for (i = 0; i < N; i++) cin >> b[i]; for (i = 0; i < N - 2; i++) for (t = 0; t < M - 2; t++) if (a[i][t] !

[백준]1005 ACM Craft

https://www.acmicpc.net/problem/1005 풀이: b[i] : i 건물을 짓는데 드는 최소시간 b[i] = max(b[i 건물을 짓는데 필요한 건물들]) -> 바로 전 단계의 건물 중 건설시간이 오래 걸리는 것을 짓는다면, 그 시간동안 다른 건물은 다 지을 수 있기 떄문에, max값만 생각한다. 코드: 사용언어 : 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 29 30 #include <iostream>#include <vector>#include <algorithm>using namespace std; int T, N, K, q, e, w, a[1002], m, n, b[1002]; vector<vector<int>> v; int A(int x) { if (b[x] !