문제 링크
https://www.acmicpc.net/problem/15312
풀이 방법
위 문제는 처음 입력받은 두 문자열을 한 글자씩 번갈아 가면서 대응되는 숫자 값으로 변경하여 문제를 해결할 수 있다. 해당 문제를 푼 시퀀스는 다음과 같다.
- 코드는 두 개의 문자열 'A'와 'B'를 입력받아 각 문자에 대응하는 값을 계산한다.
- 입력된 문자열의 길이만큼 반복하면서, 각 문자에 대응하는 알파벳 값으로 계산한 결과를 순차적으로 'result' 벡터에 저장한다.
- 그 후, 'result' 벡터의 크기가 2보다 큰 동안 아래 과정을 반복한다.
- 'result' 벡터를 순회하면서 현재 값과 다음 값의 합을 계산하고, 만약 합이 10 이상이면 10을 뺀 값을 'tempResult' 벡터에 저장한다.
- 계산이 끝나면 'result' 벡터를 'tempResult'로 대체하고, 'tempResult' 벡터를 초기한다.
위 설명과 아래 코드 및 주석을 참고하면 풀이를 쉽게 이해할 수 있다.
코드
#include <bits/stdc++.h>
using namespace std;
// 각 알파벳에 대응하는 값 배열
int alphabet[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::sync_with_stdio(false);
cin.tie(0);
// 이름 두 개 입력 받기
string A, B;
cin >> A >> B;
// 이름의 길이
int nameLength = A.size();
// 각 알파벳에 대응하는 값을 계산하여 결과 벡터에 저장
vector<int> result;
for (int i = 0; i < nameLength; i++) {
result.push_back(alphabet[A[i] - 'A']);
result.push_back(alphabet[B[i] - 'A']);
}
// 결과를 계산하고 갱신하는 부분
while (result.size() > 2) {
vector<int> tempResult;
for (int i = 0; i < result.size() - 1; i++) {
int num = result[i] + result[i + 1];
if (num >= 10) num -= 10;
tempResult.push_back(num);
}
result = tempResult;
tempResult.clear();
}
// 최종 결과 출력
for (auto c : result) {
cout << c;
}
return 0;
}
'CS(Computer Science)지식 > [C++][코딩 테스트] 자료구조 및 알고리즘' 카테고리의 다른 글
[C++] 백준 2490번 : 윷놀이 (0) | 2025.02.22 |
---|---|
[C++] 백준 10871번: X보다 작은 수 (0) | 2025.02.22 |
[C++] 백준 9536번: 여우는 어떻게 울지? (0) | 2024.02.04 |
[C++] 백준 2999번: 비밀 이메일 (0) | 2024.02.04 |
[C++] 백준 1969번: DNA (0) | 2024.02.04 |