https://www.acmicpc.net/problem/17265
풀이: 최단 거리이므로 오른쪽과 아래쪽으로만 이동한다.
현재 위치가 연산자라면,
이전까지 연산해왔던 값을 x라고 하자
연잔자를 ㅁ 라고 하고,
다음 이동할 곳의 숫자를 y라고 하자.
현재 위치의 연산자를 이용하여 x ㅁ y 를 연산한 후 다음 숫자로 이동한다.
현재 위치가 숫자라면, 현재 위치가 학교인지 판단 후
학교가 아니라면 오른쪽 또는 아래로 이동한다.
학교라면 현재까지 연산해왔던 값이 지금 저장해 놓은 최댓값보다 크다면 교체한다.
또한 현재까지 연산해왔던 값이 지금 저장해 놓은 최솟값보다 작다면 교체한다.
https://www.acmicpc.net/problem/1759
풀이: C개의 문자들을 사전순으로 정렬한다.
정렬된 문자열을 L개만큼 출력한다.
단, 최소 한 개의 모음과 두개의 자음이 있어야한다.
증가하는 순서로 있어야한다.
코드: 사용언어 : 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 <algorithm>using namespace std; int n, m, i, b[20]; char c[20], d[20]; void P(int x, int z) { if (x == n) { int y = 0, t = 0, r = 0; for (; y < x; y++) if (d[y] == 'a' || d[y] == 'e' || d[y] == 'i' || d[y] == 'o' || d[y] == 'u') t++; else r++; if(t && r>1) cout << d << endl; return; } for (int y = z; y < m; y++) if (!
https://www.acmicpc.net/problem/16637
풀이: 순서대로 사칙연산을 진행한다.
이 때, 현재 숫자만 계산하는 것, 현재 숫자 (연산자) 다음 숫자 를 계산하는 것 두 가지로 나누어 생각한다.
현재 숫자만 계산하는 것은, 이전에 계산했던 숫자 (연산자) 현재 숫자
두번째 경우는, 이전에 계산했던 숫자 (연산자) ( 현재 숫자 (연산자) 다음 숫자 )
이렇게 두 가지 경우로 모든 구간을 연산하여 완전탐색을 돌린다.
정답의 범위가 -2^31 ~ 2^31 이므로 최댓값의 초기값을 0으로 하지않도록 주의하자.
코드: 사용언어 : c++
https://www.acmicpc.net/problem/11382
풀이: A, B, C 를 각각 문자열로 변환한다.
변환된 문자열을 한자리씩 더한다.
만약 각 자릿수의 숫자가 10이 넘어간다면 다음 자릿수에 올림을 해준다.
더해진 문자열을 출력한다.
코드: 사용언어 : c++
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 #include <iostream>#include <algorithm>using namespace std; int main() { string a, b, c, d; cin >> a >> b >> c; int m = max(a.
https://www.acmicpc.net/problem/3056
풀이: d[x] : 비트마스크가 x인 미션을 완료 할 확률
비트마스크 x : 나누어 준 미션은 1, 아직 나누어 주지 않은 미션은 0
비트마스크가 1, 10, 100, 1000 ….. 등 1의 갯수가 1개인 것은 첫 번째 지미 본드가 수행한다고 한다.
비트마스크가 11, 110, 1100, 11000 ….. 등 1의 갯수가 2개인 것은 두 번째 지미 본드가 수행한다고 한다.
….
비트마스크를 0 ~ (1 « n) 까지 순회한다.
현재의 비트마스크를 i 라고 하자, 그 비트의 중간에 0이 들어있다면, 그 위치에 1을 넣는다.