본문 바로가기

Coding Test/Problem Number

[Java] 잃어버린 괄호 [1541번]

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

  • 예제 입력1
55-50+40
  • 예제 출력1
-35
  • 예제 입력2
10+20+30+40
  • 예제 출력2
100
  • 예제 입력3
0

  • 문제 접근
    • 입력 ⇒ 피연산자와 연산자가 1줄에 모두 주어짐
    • 출력 ⇒ 괄호를 친다고 가정했을 때 가장 최솟값을 출력
  • 문제 해결
    • 괄호를 치려면 마이너스(-) 이후에 마이너스(-)가 다시 등장하기 전까지범위 내의 플러스(+)들을 모두 더한 뒤 빼주는 것이 가장 최솟값을 만드는 방법
    • split을 이용하여 -를 기준으로 모두 나누고, 나뉘어진 상태에서 +를 기준으로 다시 나눠서 모두 더하기
    • 첫 번째값을 제외한 모든 값 빼기
  • 기존 풀이 [메모리 : 14264 KB / 시간 : 112 ms]
public static void main(String[] args) throws Exception{
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    // -를 기준으로 split
    String[] splitStr = br.readLine().split("-");
    // split한 문자열을 계산하여 int 배열로 변환
    int[] intArr = subSum(splitStr);

    // 향상 for문을 쓰려고 첫 번째값(무조건 양수)*2
    // 첫번째를 포함한 배열에 있는 모든 값을 뺄 것이기 때문
    int minValue = intArr[0] * 2;
    for(int num : intArr)
        minValue -= num;

    System.out.println(minValue);
}

private static int[] subSum(String[] strArr){
    int[] arr = new int[strArr.length];

    for(int i = 0; i < strArr.length; i++){
        // -로 나뉜 문자열 배열에서 i번째 있는 값을 +로 다시 나눔
        String[] sub = strArr[i].split("\\+");
        int sum = 0;
        for (String string : sub) // 모두 더하기
            sum += Integer.parseInt(string);
        // i번째 방에 모두 더한 값 추가
        arr[i] = sum;
    }

    return arr;
}

 

'Coding Test > Problem Number' 카테고리의 다른 글

[Java] 30 [10610번]  (0) 2024.07.31
[Java] 너의 평점은 [25206번]  (0) 2024.07.31
[Java] 두라무리 휴지 [25178번]  (0) 2024.07.31
[Java] 바이러스 [2606번]  (0) 2024.07.29
[Java] 특정 거리의 도시 찾기 [18352번]  (0) 2024.07.29