컴굥일지

[BOJ/백준 15312][C++] 이름 궁합 본문

알고리즘/코테 문제

[BOJ/백준 15312][C++] 이름 궁합

gyong 2022. 3. 25. 21:41
반응형

문제

https://www.acmicpc.net/problem/15312

백준 15312

백준 15312

 

문제 내용

영어 이름 2개를 입력받아, 두 이름의 궁합을 출력하면 된다.

궁합은 알파벳의 획순을 두고, 인접한 것끼리 계속 더해나가면 되는 방식이다. (1의 자리만 나타낸다)

 

문제 풀이

먼저, 문제 힌트에 적힌 대로 각 알파벳 별로 획순을 배열에 미리 저장해둔다.

그리고 문자열 두 개를 입력받아, 알파벳을 번갈아가며 저장하면 된다.

이때 알파벳 자체를 저장하기보단, 알파벳의 획순을 저장한다.

 

그리고 반복문 안에서 양 옆의 숫자와 계속 더해나가면 된다.

원소가 2개만 남았을 때, 결과를 출력하고 반복문을 멈추면 된다.

 

코드

#include <iostream>
#include <vector>
#include <string>
using namespace std;

//획
int line[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() {
    ios_base::sync_with_stdio(0);
    cin.tie(0); cout.tie(0);

    //입력
    string a, b;
    cin >> a >> b;

    //문제 해결
    vector<int>combine;
    for (int i = 0; i < a.size(); i++) {
        combine.push_back(line[a[i] - 'A']);
        combine.push_back(line[b[i] - 'A']);
    }

    while (1) {
        vector<int>tmp;
        for (int i = 0; i < combine.size() - 1; i++)
            tmp.push_back((combine[i] + combine[i + 1]) % 10);

        //결과 출력
        combine = tmp;
        if (combine.size() == 2) {
            cout << combine[0] << combine[1] << '\n';
            return 0;
        }
    }
}

반응형
Comments