devkty 2025. 6. 16. 02:26
728x90

8595 히든 넘버 (Java)

https://www.acmicpc.net/problem/8595

첫번째 줄은 단어 길이 a 입력이 있어야합니다. 두번째 줄은 단어와 숫자로 된 단어가 입력되야 합니다. 만약, 연속된 숫자가 있다면 하나의 숫자로 판단되어야합니다.

결론적으로 문자열의 숫자를 알파벳 단위로 파싱하고 모든 숫자들의 합을 출력하면 됩니다.

자바 코드

import java.util.*;
import java.util.regex.*;

public class Main_8595 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);  // 스캐너로 인풋을 받는다.

        int a = sc.nextInt();
        String b = sc.next();      // 숫자들을 문자열로 입력 받음

        // long sum = 0;   // 합을 0으로 초기화
        int sum = 0;

        Pattern p = Pattern.compile("\\d+");  // 하나 이상의 숫자 (연속된 숫자)
        Matcher m = p.matcher(b);

//        if (b.matches(".*\\d.*")) {
//            while (m.find()) {
//                sum += Integer.parseInt(m.group());
//            }
//        }
//        else {
//            sum = 0;
//        }

        while (m.find()) {
            sum += Long.parseLong(m.group());
        }

    System.out.println(sum);
    }
}

// input에 아무 숫자도 없을때를 고려하지 않아서 if문으로 조건을 추가했다.
// 근데 알고보니 while문에 그 조건이 내포되어 있다.
// 근데 왜 틀린거야? 반례도 없는 것 같은데
// 알아보니, 처리 길이 문제였다. int 자료형을 long으로 바꿨다.

트러블 슈팅

input에 아무 숫자도 없을때를 고려하지 않아서 if문으로 조건을 추가했습니다. 근데 알고보니 while문에 그 조건이 내포되어 있어서 롤백했습니다.

그런데도 왜 틀린걸까…? 반례도 없는 것 같은데 말이죠.
→ 알아보니, 처리 길이 문제였습니다. int 자료형을 long으로 바꿨더니 통과되었습니다.

728x90