백준 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