문제의 난이도가 Bronze인 만큼, 문제가 그렇게 어렵지 않다.
문제의 핵심은 아주 아주 간단하다.
1. 알파벳의 획수를 어떻게 저장할 것인가?
2. 수행을 어떤 방식으로 할 것인가?
사실 배열로 저장해도 되지만, 배열로 찾는 거보다 map을 활용해서 저장하는 것이 더 좋다고 생각했다.
일단 알파벳 : 획수와 같은 key, value 형식이 가장 먼저 생각났다는 점,
실제로 프로그래밍하기 쉽고 직관적이라는 점에서 map을 선택하게 되었다.
사실 이 문제는 수행의 횟수가 명확하게 정해져 있다.
두 이름의 길이인 N, M을 바탕으로 N + M -2가 되는데, 마지막에 2개만 남겨야 하기 때문이다.
따라서 이 수행 횟수만큼 진행하되,
배열을 하나만 쓰는 경우 마지막 요소에 대해서만 잘 해결해주면 문제가 아주 깔끔하게 해결된다.
최대한 본인의 힘으로 풀어보시고 확인하시는 걸 추천합니다!
#include <iostream>
#include <map>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;
map<char, int> m;
vector<int> con;
// 알파벳 : 획수 형태의 map을 만든다.
void init() {
m.insert(make_pair('A', 3));
m.insert(make_pair('B', 2));
m.insert(make_pair('C', 1));
m.insert(make_pair('D', 2));
m.insert(make_pair('E', 4));
m.insert(make_pair('F', 3));
m.insert(make_pair('G', 1));
m.insert(make_pair('H', 3));
m.insert(make_pair('I', 1));
m.insert(make_pair('J', 1));
m.insert(make_pair('K', 3));
m.insert(make_pair('L', 1));
m.insert(make_pair('M', 3));
m.insert(make_pair('N', 2));
m.insert(make_pair('O', 1));
m.insert(make_pair('P', 2));
m.insert(make_pair('Q', 2));
m.insert(make_pair('R', 2));
m.insert(make_pair('S', 1));
m.insert(make_pair('T', 2));
m.insert(make_pair('U', 1));
m.insert(make_pair('V', 1));
m.insert(make_pair('W', 1));
m.insert(make_pair('X', 2));
m.insert(make_pair('Y', 2));
m.insert(make_pair('Z', 1));
}
int main() {
init();
int N, M;
string A, B;
cin >> N >> M;
cin >> A >> B;
// 초기 상태를 만든다.
// 다만, 남은 글자가 있을 수 있으므로 이를 체크한다.
for(int i =0; i< max(N, M); i++) {
if(N > i) {
con.push_back(m[A.at(i)]);
}
if(M > i) {
con.push_back(m[B.at(i)]);
}
}
// 정해진 횟수 : N + M -2
for (int i = 0; i < N + M - 2; i++) {
for (int j=0; j<con.size(); j++) {
// 마지막 경우만 유의해준다.
if (j == con.size() -1) {
con.pop_back();
break;
}
// 더하는 과정
con[j] = (con[j] + con[j + 1]) % 10;
}
}
// 출력 과정에서 십의 자리가 0일 경우를 체크한다.
if (con[0] == 0) {
cout << con[1];
} else {
cout << con[0] << con[1];
}
cout << '%';
return 0;
}
[백준][알고리즘][C++] 2606 바이러스 (1) | 2020.03.29 |
---|---|
[백준][알고리즘][C++] 16165 걸그룹 마스터 준석이 (1) | 2020.03.18 |
댓글 영역