본문 바로가기

알고리즘/BOJ

15312번

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= { 32123323322122122212111221 };
 
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


반응형

'알고리즘 > BOJ' 카테고리의 다른 글

10250번  (0) 2018.03.23
2548번  (2) 2018.03.23
1076번  (0) 2018.03.23
1010번  (0) 2018.03.21
1005번  (0) 2018.03.21