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

SeungMin Park·2024년 1월 29일
1

알고리즘

목록 보기
3/9

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

실버2 수준의 1541번 잃어버린 괄호 문제이다.
처음에 보고 쉽다고 생각했는데, 생각보다 시간이 좀 걸렸다.
문자열도 좀 다룰줄 알아야 하는 문제이다


문제


풀이

우선 어떻게 코드를 설계해야할지 생각해보았다.

처음에는 괄호를 하나만 할 수 있는줄 알고 코드를 짜보았는데, 자꾸 틀리길래 보니까 괄호의 수는 여러개여도 상관이 없는거 같았다. 어쩐지 어렵더라

문자열을 입력받고 마이너스(-) 가 있는 구분별로 문자열을 잘라 그 안에 + 가 있다면 다 더해버리면 될거 같았다.

EX) 55-50+40  =  45
-> 55 -  (50+40)
-> 55 -  90 =   -35

이 알고리즘대로 하면 최솟값을 출력할 수 있다

따라서 코드를 구현해보았다

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String str = sc.next();

        String [] part = str.split("-");
        int total = calculate(part[0]);

        for(int i=1; i<part.length; i++){
            total -= calculate(part[i]);
        }
        System.out.print(total);
    }

    private static int calculate(String s) {
        String[] part = s.split("\\+"); // "+"는 정규 표현식에서 특별한 의미를 갖기 때문에 "\\"를 추가하여 이스케이프해야 한다.
        int total = 0;
        for (int i = 0; i < part.length; i++) {
            total += Integer.parseInt(part[i]); //
        }
        return total;
    }

}

Scanner를 통해 str라는 문자열을 입력받고, .split을 통해 "-" 을 경계로 문자열을 생성하여 분리해준다

그 뒤의 과정들은 거의 calculate 메서드에서 진행되는데, 문자열 s를 넘겨서 s 안에 "+" 가 있다면 "+"을 기준으로 다시 .split 해 더해서 total 이라는 숫자 값을 return 한다.

우선 part[] 에 저장되어 있는 값을 빼야하는데, 첫번째인 part[0] 값에서 뒤에 값들을 다 빼야하므로, total이라는 값을 part[0] 의 값으로 설정한 후, for 문을 통해 계속 빼도록 구현하였다.


느낀점, 어려웠던 점

calculate 메서드 안에서 "+"으로 .split을 할때 자꾸 오류가 났는데, "+"는 정규 표현식에서 특별한 의미를 갖기 때문에 "\"를 추가하여 이스케이프해야 한다고 한다. 꼭 기억해야될거 같다.

금방 풀 수 있을줄 알았는데, 생각보다 시간이 걸려서 문자열 다루는 법을 다시 익혀야겠다고 생각했다


깃허브 풀이 링크

https://github.com/smpark00/Algorithm/tree/main/%EB%B0%B1%EC%A4%80/Silver/1541.%E2%80%85%EC%9E%83%EC%96%B4%EB%B2%84%EB%A6%B0%E2%80%85%EA%B4%84%ED%98%B8

0개의 댓글

관련 채용 정보