[프로그래머스] 절대 외부 IDE를 써선 안돼/Java

[lv2] 튜플

SH3542 2024. 11. 15. 18:45

https://school.programmers.co.kr/learn/courses/30/lessons/64065

 

문자열 파싱 + 누적합

 

1. 파싱

s = "{{2},{2,1},{2,1,3},{2,1,3,4}}"

 

1-1. {{, }} 제거

s = "2},{2,1},{2,1,3},{2,1,3,4"

 

1-2. },{를 기준으로 split하여 String 배열로 변경

s[] = [[2] [2,1], [2,1,3], [2,1,3,4]]

* }와 {는 정규식에서 특수 문자로 인식되므로, 이스케이프 처리하기 위해 \\},\\{로 써야 한다.

 

1-3. ,를 기준으로 split하여 int 배열로 변경

 

2. 누적합 초기화

 

문제의 입력은 다음과 같이 size 순서로 주어지지 않는 케이스가 있다.

"{{4,2,3},{3},{2,3,4,1},{2,3}}"

 

따라서, 1-3의 값을 누적합 배열에 idx = size, arr[idx] = value로 기록한다.

(list에 value만 넣고 오름차순 정렬해도 된다.)

 

3. 누적합을 활용하여 답 도출

size가 작은 것부터 순회하며 기록한다. answer[i] = arr[i] - arr[i-1]이다.

 

import java.util.*;

class Solution {

    int MAX = 500;
    int[] arr = new int[MAX];
    List<Integer> list = new ArrayList<>();

    public int[] solution(String s) {
        String[] split = s.substring(2, s.length()-2).split("\\},\\{");

        for(int i=0; i<split.length; i++) {

            int[] sub = Arrays.stream(split[i].split(",")).mapToInt(Integer::parseInt).toArray();

            int sum = 0;
            for(int val : sub)
                sum += val;

            arr[sub.length -1] = sum;
        }

        int[] answer = new int[split.length];

        int prev = 0;
        for(int i=0; i<split.length; i++) {
            answer[i] = arr[i] - prev;
            prev = arr[i];
        }

        return answer;
    }
}

'[프로그래머스] 절대 외부 IDE를 써선 안돼 > Java' 카테고리의 다른 글

[lv2] 수식 최대화  (0) 2024.11.16
[v2] 메뉴 리뉴얼  (0) 2024.11.16
[lv3] 양과 늑대  (2) 2024.11.13
[v2] 무인도 여행  (2) 2024.11.11
[lv3] 110 옮기기  (0) 2024.11.11