[C++] BOJ 17269번: 이름궁합 테스트

ㅎㅎ·2023년 3월 31일
0

BOJ

목록 보기
18/65

BOJ 17269번: 이름궁합 테스트

문제

입력

첫 번째 줄에 이름의 길이 N과 M을 받는다. (2 ≤ N, M ≤ 100)

다음 줄에 이름 A와 B를 입력받는다. 이름은 반드시 알파벳 대문자만 주어진다.

출력

A와 B의 이름궁합이 좋을 확률을 %로 출력한다. 단, 십의 자리가 0일 경우엔 일의 자리만 출력한다.


문제 풀이 - 성공

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

int name[4000];
int arr[26] = { 3, 2, 1, 2, 4, 3, 1, 3, 1, 1, 3, 1, 3, 2, 1, 2, 2, 2, 1, 2, 1, 1, 1, 2, 2, 1 };

int main() {
    cin.tie(NULL); cout.tie(NULL);
    ios_base::sync_with_stdio(false);

    int n, m, minnum, maxnum, size, i, j, answer;
    bool flag;
    string n1, n2;

    cin >> n >> m;
    cin >> n1 >> n2;

    minnum = min(n, m);
    maxnum = max(n, m);

    for (i = 0; i < minnum; i++) {
        name[2 * i] = arr[n1[i]-'A'];
        name[2 * i + 1] = arr[n2[i]-'A'];
    }

    size = n + m;
    if (n != m) { // 길이가 다를 경우
        if (maxnum == n) { flag = 0; }
        else { flag = 1; }

        if (!flag) { // n1이 더 길다
            for (i = minnum * 2, j = minnum; i < size; i++, j++) { name[i] = arr[n1[j]-'A']; }
        }
        else {
            for (i = minnum * 2, j = minnum; i < size; i++, j++) { name[i] = arr[n2[j]-'A']; }
        }
    }

    for (; size > 2; size--) {
        for (i = 0; i < size; i++) { name[i] = (name[i] + name[i + 1]) % 10; }
    }
    answer = name[0] * 10 + name[1];
    cout << answer << "%";
    
    return 0;
}
profile
Backend

0개의 댓글