백준 8595번: 히든 넘버 (C++)
2023. 1. 26. 22:17ㆍ알고리즘/문자열
https://www.acmicpc.net/problem/8595
8595번: 히든 넘버
첫째 줄에 단어의 길이 n (1 ≤ n ≤ 5,000,000)이 주어진다. 둘째 줄에는 단어가 주어진다. 단어는 알파벳 대/소문자와 숫자(0-9)로 이루어져 있다.
www.acmicpc.net
풀이
substr 사용법 잊어버려서 엄청 실패했던 문제. substr(시작점, 시작점으로 부터 갯수) - 기억하자.
구현 방식은 간단하다.
문자열로 입력을 받고 for문을 돌다가 숫자인 부분이 있으면 그 인덱스(idx)를 저장,
그 다음 for문에서 idx + 1 부터 탐색.
숫자가 아닌 부분이 나타나면 substr 로 잘라서 tmp에 넣고 6자리가 넘는 지 확인 후,
첫 번째 for문이 중복으로 탐색하지 않기 위해 i 에 j를 넣어줘서 두 번째 for문이 끝나고 난 이후부터 탐색할 수 있도록 했다.
전체 코드
#include <iostream>
#include <string>
using namespace std;
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
int n, idx = 0;
long long sum = 0;
string s;
cin >> n >> s;
s += 'a';
for (int i = 0; i < n; i++) {
if (s[i] >= '0' && s[i] <= '9') {
idx = i;
for (int j = idx + 1; j < s.size(); j++) {
if (s[j] < '0' || s[j] > '9' || j == s.size() -1) {
int tmp = stoi(s.substr(idx, j - idx));
if (tmp < 1000000) sum += tmp;
i = j;
break;
}
i = j;
}
}
}
cout << sum;
}
'알고리즘 > 문자열' 카테고리의 다른 글
백준 1259번: 팰린드롬수 (C++) (0) | 2023.01.26 |
---|