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 |