티스토리 뷰
문제링크 : https://www.acmicpc.net/problem/17269
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
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};
vector<int>v;
string result;
void cal(vector<int>v)
{
if(v.size()==2)
{
result = to_string(10*v[0]+v[1])+'%';
return;
}
vector<int>tmp;
for(int i=0; i<v.size()-1;i ++)
{
tmp.push_back((v[i]+v[i+1])%10);
}
cal(tmp);
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int N, M;
string s1, s2;
cin >> N >> M >> s1 >> s2;
int len = max(N, M);
for(int i=0; i<len; i++)
{
if(i<N)v.push_back(arr[s1[i]-'A']);
if(i<M)v.push_back(arr[s2[i]-'A']);
}
cal(v);
cout << result;
return 0;
}
먼저 교차한 문자열을 저장 및 매치된 숫자 값으로 변환해주어야 한다.
최대 문자 길이를 기준으로, 가능한 경우에만 교차하며 문자열을 저장해준다.
이때 바로 주어진 배열 입력값과 매치한 숫자 값을 저장해주었다.
이후 재귀를 통해서 숫자값을 누적 합산해간다.
주어진 조건에 따라 10이 넘는 경우는 모듈러 연산을 통해 일의 자리 숫자만 남긴다.
이를 숫자 2개만 남을 때까지 반복하고, 최종 2개 값을 통해 궁합 확률을 출력한다.
'백준 > 실버' 카테고리의 다른 글
[백준 2057번] 팩토리얼 분해 (C++) (0) | 2025.07.10 |
---|---|
[백준 5671번] 호텔 방 번호 (C++) (0) | 2025.07.08 |
[백준 16208번] 귀찮음 (C++) (0) | 2025.07.07 |
[백준 1418번] K-세준수 (0) | 2025.07.07 |
[백준 15719번] 중복된 숫자 (C++) (0) | 2025.07.05 |