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; }
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
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 ?
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 (!
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] !
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] !