반응형
문제
https://www.acmicpc.net/problem/20154
- 난이도 : 브론즈 1
- 소요 시간 : 26분
접근 방법
1. 맵을 사용하여 각 문자별 획수를 저장한다.
2. 주어진 문자열의 획수들을 벡터에 저장한다.
3. 벡터를 2칸씩 돌면서 획수들을 더하고 10으로 나눈 숫자를 새로운 벡터에 넣는다.
4. 길이가 홀수이면 마지막 남은 획수를 새로운 벡터에 넣는다.
5. 새로운 벡터의 사이즈가 1이 될때까지 3~4를 반복한다.
나의 풀이
#include <iostream>
#include <string>
#include <unordered_map>
#include <vector>
using namespace std;
vector<int> calculate(vector<int> v) {
vector<int> temp;
for(int i=0; i<v.size(); i+=2) {
if (i+1 != v.size()) {
int sum = (v[i] + v[i+1]) % 10;
temp.push_back(sum);
} else {
temp.push_back(v[i]);
}
}
return temp;
}
int main() {
// input
string S;
cin >> S;
// solve
unordered_map<char, int> strokes = {
{'A', 3}, {'B', 2}, {'C', 1}, {'D', 2}, {'E', 3}, {'F', 3},
{'G', 3}, {'H', 3}, {'I', 1}, {'J', 1}, {'K', 3}, {'L', 1},
{'M', 3}, {'N', 3}, {'O', 1}, {'P', 2}, {'Q', 2}, {'R', 2},
{'S', 1}, {'T', 2}, {'U', 1}, {'V', 1}, {'W', 2}, {'X', 2},
{'Y', 2}, {'Z', 1}
};
// 문자열 -> 숫자로 변환
vector<int> v;
for(char ch : S) {
auto iter = strokes.find(ch);
if (iter != strokes.end())
v.push_back(iter->second);
}
// 더하기
while(true) {
if(v.size() == 1) {
if (v[0] % 2 == 0)
cout << "You're the winner?\n";
else
cout << "I'm a winner!\n";
return 0;
} else {
v = calculate(v);
}
}
return 0;
}
정리
map 초기화 리스트를 사용하는 법을 헷갈려 일일히 insert 했었다..
반응형
'코딩테스트' 카테고리의 다른 글
[백준] 2346. 풍선 터뜨리기 - C++ (0) | 2024.07.17 |
---|---|
[백준] 14172. 넴모넴모 (Easy) - C++ (3) | 2024.07.16 |
[프로그래머스] 문자열 내 p와 y의 개수 - JAVA (0) | 2024.04.19 |
[프로그래머스] 완주하지 못한 선수 - C++ (0) | 2024.04.08 |
[프로그래머스] 체육복 - C++ (0) | 2024.04.07 |