문제
https://www.codetree.ai/problems/return-value-of-hash-function/description
구상
해시 함수에 문자열 입력값을 넣어서 특정한 값으로 추출하는 해싱 그 자체인 문제였다.
string으로 입력 받은 후에 인덱스 하나하나 고려하며 계산을 진행했다. 먼저 숫자가 나오면, num이라는 변수에 넣어주었다. 숫자가 연이어 나오면, 연이어 나온 숫자 자체가 값으로 판단이 되어야 해서 직전에 숫자가 나왔었는지 알려주는 flag를 이용했다. 영어가 나오면 이전에 num에 담긴 값이 있다면 해당 값을 int로 변경 후에 sum이라는 최종값을 저장하는 변수에 더해주었다. 그리고 대문자와 소문자에 따라 각자가 대응되는 수를 sum에 더했다. 숫자가 마지막으로 나오면 num에 있는 값이 sum으로 들어가지 않기에 sum%100 출력전에 마지막으로 num에 값이 들어있다면 남은 숫자를 더해주었다.
풀이 + 코드
#include <iostream>
#include <vector>
#include <algorithm>
#include <climits>
#include <queue>
#include <string>
#define MAX 101
#define INF 987654321
#define endl "\n"
using namespace std;
string str; // 길이 1~100
int sum = 0;
void solution() {
bool flag = false;
string num = "";
for (int i = 0; i < str.size(); i++) {
// 숫자라면
if (isdigit(str[i])) {
if (flag) { // 직전에도 숫자 나왔었음
num += str[i];
} else { // 다른거 나왔다가 숫자 나옴
num = str[i];
flag = true;
}
}
// 영 대문자라면
else if ('A' <= str[i] && str[i] <= 'Z') {
flag = false;
if (!num.empty()) {
sum += stoi(num);
num = "";
}
sum += (str[i] - 'A' + 100);
}
// 영 소문자라면
else if ('a' <= str[i] && str[i] <= 'z') {
flag = false;
if (!num.empty()) {
sum += stoi(num);
num = "";
}
sum += (str[i] - 'a' + 200);
}
}
// 마지막으로 남은 숫자 더하기
if (!num.empty()) {
sum += stoi(num);
}
cout << sum % 100 << endl;
}
int main() {
ios::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
// 입력
cin >> str;
// 로직
solution();
return 0;
}
'알고리즘 > 코테 도장깨기' 카테고리의 다른 글
[KAUPC/C++] 곱빼기 (Math) (0) | 2024.09.09 |
---|---|
[KAUPC/C++] 저것도 먹을거란 말이야 (Greedy / Math) (1) | 2024.09.09 |
[KAUPC/C++] 기후동행 카드 (Bruteforce) (3) | 2024.09.05 |
[KAUPC/C++] 한진이의 상품뽑기 (Bruteforce) (2) | 2024.09.05 |
[KAUPC/C++] 캣타워 돌리기 (Simulation) (0) | 2024.09.05 |