15312번 - 이름 궁합
나는 큐를 사용해서 문제를 풀었다. vector 나 배열을 사용해도 되지만 크기를 줄여나가야 하기 때문에
큐가 적합할 거라고 생각했다.
로직은 큐에 처음에 글자들의 개수를 담는다. 만약 예시처럼 6 2 5 4 5 이렇게 담겼다면
6 을 꺼내고 팝시켜서 6을 없애고 2를 꺼내서 두수를 더하고 그 값을 큐에 넣는다.
그 다음에는 2를 꺼내고 팝 시켜서 2를 없애고 5를 꺼내서 두수를 더하고 그 값을 큐에 넣는다.
이런식으로 큐의 크기가 2가 될때까지 줄여준다. 그리고 마지막에 큐 값 두개를 꺼내서 출력하면 된다.
<정답 코드>
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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 | #include<iostream> #include<string> #include<queue> using namespace std; int num[26] = { 3, 2, 1, 2, 3, 3, 2, 3, 3, 2, 2, 1, 2, 2, 1, 2, 2, 2, 1, 2, 1, 1, 1, 2, 2, 1 }; int main(int argc, char** argv) { ios::sync_with_stdio(false); cin.tie(NULL); string A, B; cin >> A >> B; queue<int> q; for (int i = 0; i < A.size(); i++) { q.push(num[A[i] - 'A']); q.push(num[B[i] - 'A']); } while (q.size()!=2) { int size = q.size(); for (int i = 0; i < size; i++) { if (i == size - 1) { q.pop(); break; } int now = q.front(); q.pop(); int next = q.front(); int mix = now + next; if (mix >= 10) { q.push(mix % 10); } else { q.push(mix); } } } cout << q.front(); q.pop(); cout << q.front(); return 0;//정상종료시 반드시 0을 리턴해야합니다. } | cs |
반응형