반응형
문제 링크 : www.acmicpc.net/problem/15312
안 푼 문제 랜덤으로 나온 문제이다. 브론즈2길래 그냥 풀어보았다
아이디어는 이렇다. 이름 A와 B는 같은 길이로 이루어져 있으므로 미리 ans(wer) 배열을 만들어놓고 주어진 알파벳 획수에 따라서 번갈아 집어넣는다.
예를 들어 입력 예시인 CJM / HER 일 경우, 획수로는 1 2 2 / 3 3 2이므로
ans 배열에는 1 3 2 3 2 2가 들어가게 된다.
이제 반복문 횟수를 아무 이름의 길이의 2배로 정해놓고 이름점을 보듯 더해가며 숫자 2개가 나올때까지 돌린다. 즉, loopCount = 2가 될 때까지 돌린다. 이 때 10이 넘는다면 10으로 나눈 나머지를 값에 저장해둔다.
마지막으로 ans 배열의 첫 번째, 두 번째 값을 출력해주면 된다.
<소스코드>
#include <iostream>
#include <string>
using namespace std;
int alphabetNum[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 };
char alphabetChar[26] = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J',
'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z' };
int ans[4010] = { 0, };
int main() {
ios_base::sync_with_stdio(false);
cin.tie(nullptr); cout.tie(nullptr);
string nameA;
string nameB;
cin >> nameA >> nameB;
for (int i = 0; i < nameA.length(); i++) {
for (int j = 0; j < 26; j++) {
if (nameA[i] == alphabetChar[j]) {
ans[i * 2] = alphabetNum[j];
}
if (nameB[i] == alphabetChar[j]) {
ans[2 * i + 1] = alphabetNum[j];
}
}
}
int loopCount = nameA.length() * 2;
while (loopCount > 2) {
for (int i = 0; i < loopCount - 1; i++) {
ans[i] += ans[i + 1];
ans[i] %= 10;
}
loopCount--;
}
cout << ans[0] << ans[1];
}
반응형
'Programming Solve > BOJ' 카테고리의 다른 글
BOJ 20953 / C++ (0) | 2021.03.02 |
---|---|
BOJ 11558 The game of death / C++ (0) | 2021.02.12 |
BOJ 2445 / C++ (0) | 2021.02.07 |
BOJ 1475 (C++) (0) | 2020.12.01 |
BOJ 1912 (C++) (0) | 2020.11.29 |