[백준] 1541번 잃어버린 괄호 (JAVA)

10000JI·2024년 6월 2일
0

코딩 테스트

목록 보기
16/39
post-thumbnail

문제사항

실버 2단계 문제였다.

구분자 "+"와 "-"를 경계로 계산하기 위해선 split() 혹은 StringTokenizer를 사용해야 한다.

평소 문제를 풀 때 BufferedReader를 사용해 문자열을 읽고, 이를 StringTokenizer로 숫자 혹은 문자 등을 추출했기 때문에 split() 대신 StringTokenizer을 사용하였다.

여기서 문제를 풀 때 주의해야 할 점은 "+"와 "-"는 서로 다른 구분자이기 때문에 별도로 객체를 정의하여 사용하였다. 만약 구분자가 없어도 하나의 토큰으로 간주된다.

반환값인 sum을 초기값으로 Integer.MAX_VALUE로 하여 이후에 대입되어야 할 조건과 구분지었다.

알고리즘 분류

  1. 그리디

  2. 문자열

  3. 파싱

코드

import java.io.*;
import java.util.*;

public class Main{
    public static void main(String args[]) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st1 = new StringTokenizer(br.readLine(), "-"); //구분자 "-"가 포함되지 않아도 하나의 토큰으로 간주됨
        int sum = Integer.MAX_VALUE;
        while (st1.hasMoreTokens()) { //따라서 "-"가 포함되지 않아도 하나의 토큰이므로 while문 실행
            int tmp = 0;
            StringTokenizer st2 = new StringTokenizer(st1.nextToken(), "+");
            while (st2.hasMoreTokens()) {
                tmp += Integer.parseInt(st2.nextToken());
            }
            if (sum == Integer.MAX_VALUE) {
                sum = tmp;
            } else {
                sum -= tmp;
            }
        }
        System.out.println(sum);
    }
}
profile
Velog에 기록 중

0개의 댓글