[C++] 백준 15312 이름 궁합
2021. 4. 16.
반응형

www.acmicpc.net/problem/15312

 

15312번: 이름 궁합

영어 대문자 알파벳 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 로 정한다. (출제자가 알파벳 대문자를 쓰는 방법이 기준이다)

www.acmicpc.net

 

1. 서론

 

기발한 구현 문제이다.

 

2. 문제 풀이

 

이름 궁합을 보는데 이름은 알파벳 대문자로만 주어진다. 둘의 이름의 범위는 2에서 2000이며, 둘의 이름 길이는 무조건 같다.

영어 대문자 알파벳 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로 정한다.

예제의 CJM은 각 1,2,2의 값을 갖게 된다. 이렇게 만든 값을 기준으로 궁합을 보면 된다. 

 

나는 배열에 미리 알파벳 획수를 넣어뒀다. 그리고 이름 a,b를 입력받아서 한 자씩 쪼개서 한 개의 배열에 넣어줬다.

예를 들면 CJM, HER 이라는 두 이름을 입력받았다면 CHJEMR 이렇게 배열을 만드는 것이다.

그렇게 만든 배열을 반복문을 통해 궁합을 본다. 궁합은 n개의 숫자를 2개가 될 때까지 각 앞 뒤 값을 더하면서 구할 수 있다.

다만 두 값을 더해서 10이 넘으면 10의 자리는 버리고 1의 자리만 가지고 다시 계산한다.

그리고 그 더한 값이 2개로 줄면 값을 출력한다.

 

3. 코드 설명

 

#include <string>
#include <vector>
#include <iostream>
#include <algorithm>

using namespace std;

int main()
{
    int i, j = 0, t;
    int n[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 };
    string a, b;
    vector<int> v;

    cin >> a >> b;

    for (i = 0; i < a.size(); i++)
    {
        t = n[a[i] - 'A'];
        v.push_back(t);

        t = n[b[i] - 'A'];
        v.push_back(t);
    }

    j = v.size();
    while(j > 2)
    {
        vector<int> v2;
        for (i = 0; i < j - 1; i++)
        {
            t = v[i] + v[i + 1];
            if (t >= 10) t -= 10;
            v2.push_back(t);  
        }

        v = v2;
        j--;
    }

    cout << v[0] << v[1] << endl; 
}

 

값을 입력받고 한 배열에 쪼개서 넣어둔다.

그리고 반복문을 돌리는데 그 안에서 백터를 새로 만들어준다. 백터 값에는 계속 배열의 앞, 뒤 값을 더한 값을 만들어 준다.

n개에서 n-1, n-2... 2까지 값을 구해준다. j로 그 수를 count 해준다.

그리고 최종 값을 출력해준다.

 

반응형

'Algorithm' 카테고리의 다른 글

[C++] 백준 16165 걸그룹 마스터 준석이  (0) 2021.04.17
[C++] 백준 17389 보너스 점수  (0) 2021.04.17
[C++] 백준 10539 수빈이와 수열  (0) 2021.04.16
[C++] 백준 15969 행복  (0) 2021.04.16
[C++] 백준 1236 성 지키기  (1) 2021.03.28
myoskin