[백준 8595] 히든 넘버 (C#, C++) - soo:bak
작성일 :
문제 링크
설명
알파벳과 숫자가 섞인 문자열이 주어지는 상황에서, 문자열의 길이 n (1 ≤ n ≤ 5,000,000)과 알파벳 소문자와 숫자로 이루어진 문자열이 주어질 때, 문자열에 숨겨진 모든 숫자를 찾아 그 합을 구하는 문제입니다.
히든 넘버는 연속된 숫자로 이루어진 덩어리이며, 각 히든 넘버는 최대 6자리입니다. 알파벳 소문자로 구분되는 각각의 숫자 덩어리를 찾아 모두 더하면 됩니다.
접근법
문자열을 처음부터 끝까지 순회하면서 연속된 숫자를 추적합니다.
숫자 문자를 만나면 현재까지 누적된 숫자에 10을 곱하고 새로운 자릿수를 더하여 숫자를 만들어갑니다.
알파벳 문자를 만나거나 문자열이 끝나면 현재까지 만든 숫자를 합계에 더하고, 새로운 히든 넘버를 찾기 위해 초기화합니다.
문자열 끝에 숫자가 있을 수 있으므로 순회가 끝난 후에도 마지막으로 누적된 숫자를 합계에 추가해야 합니다.
Code
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
using System;
namespace Solution {
class Program {
static void Main(string[] args) {
var n = int.Parse(Console.ReadLine()!);
var text = Console.ReadLine()!;
long sum = 0;
long current = 0;
for (var i = 0; i < n; i++) {
var ch = text[i];
if (ch >= '0' && ch <= '9') {
current = current * 10 + (ch - '0');
} else {
sum += current;
current = 0;
}
}
sum += current;
Console.WriteLine(sum);
}
}
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n; cin >> n;
string text; cin >> text;
ll sum = 0;
ll current = 0;
for (int i = 0; i < n; i++) {
if (isdigit(text[i])) {
current = current * 10 + (text[i] - '0');
} else {
sum += current;
current = 0;
}
}
sum += current;
cout << sum << "\n";
return 0;
}