Algorithm/Baekjoon

Baekjoon 8595 히든 넘버 JAVA

Hunveloper 2023. 3. 7. 22:36
728x90

 

8595번: 히든 넘버

첫째 줄에 단어의 길이 n (1 ≤ n ≤ 5,000,000)이 주어진다. 둘째 줄에는 단어가 주어진다. 단어는 알파벳 대/소문자와 숫자(0-9)로 이루어져 있다. 

www.acmicpc.net

문제

단어에 숫자가 숨어있다. 이 숫자를 히든 넘버라고 한다. 알파벳 대/소문자와 숫자로 이루어진 단어가 주어졌을 때, 모든 히든 넘버의 합을 구하는 프로그램을 작성하시오.

단어와 히든 넘버는 아래와 같은 성질을 갖는다.

  • 연속된 숫자는 한 히든 넘버이다.
  • 두 히든 넘버 사이에는 글자가 적어도 한 개 있다.
  • 히든 넘버는 6자리를 넘지 않는다.
 
 
입력

첫째 줄에 단어의 길이 n (1 ≤ n ≤ 5,000,000)이 주어진다. 둘째 줄에는 단어가 주어진다. 단어는 알파벳 대/소문자와 숫자(0-9)로 이루어져 있다. 

출력

입력으로 주어진 단어에 숨어있는 모든 히든 넘버의 합을 출력한다. 만약, 히든 넘버가 없는 경우에는 0을 출력한다.

풀이

입력되는 문자열 중간에 있는 숫자들을 더한 값을 출력하는 문제이다.

입력되는 문자들은 A-Z, a-z 와 0-9까지 문자들로 한정된다.

여기서 우리는 0-9로 만들어지는 숫자들을 더해야하기에 필요없는 알파벳들을 제거해야한다.

정규표현식을 이용하여 대소문자 알파벳들을 공백으로 만들어준다.

그러면 입력되는 예제인 "ab13c9d07jeden"는 "  13 9 07     "로 바뀐다.

이렇게 바뀐 문자열을 StringTokenizer를 이용하여 각 스페이스를 기준으로 토큰화를 시켜 더하게 되면

13 + 9 + 7한 값이 되어 29를 출력하게 된다.

코드
import java.io.*;
import java.util.*;

public class Main {
	public static void main(String[] args) throws Exception{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		br.readLine();
		long ans=0;
		StringTokenizer st = new StringTokenizer(br.readLine().replaceAll("[a-zA-Z]", " "));
		while(st.hasMoreTokens())
			ans+=Integer.parseInt(st.nextToken());
		System.out.println(ans);
	}
}
728x90
728x90