
-Code
import java.util.*;
class Solution {
public int[] solution(String s) {
// 튜플들을 받을 리스트
List<int[]> tuples = new ArrayList<>();
// 튜플을 만들기 위한 스트링 빌더
StringBuilder sb = new StringBuilder();
for (int i = 1; i < s.length() - 1; i++) {
char now = s.charAt(i);
// }일 경우 만들어진 튜플을 저장하고 sb 초기화
if (now == '}') {
String tupleStr = sb.toString();
// 첫 튜플 말곤 ','가 포함되어 있으므로 ','제거
if (tupleStr.startsWith(",")) tupleStr = tupleStr.substring(1);
// 배열로 변경
int[] tuple = Arrays.stream(tupleStr.split(","))
.mapToInt(Integer::parseInt).toArray();
// 튜플 추가
tuples.add(tuple);
// sb 초기화
sb.setLength(0);
} else if (now != '{') {
// 숫자와 ,를 저장
sb.append(now);
}
}
// 길이로 정렬
tuples.sort((o1, o2) -> {
return o1.length - o2.length;
});
// 순서를 포함해 저장하고 중복을 제거하기 위한 set
Set<Integer> answer = new LinkedHashSet<>();
for (int[] tuple : tuples) {
for (int num : tuple) {
answer.add(num);
}
}
return answer.stream().mapToInt(Integer::intValue).toArray();
}
}
처음에 '}'가 나올 때 tuples에 저장하고 }가 아니면 저장을 하는 방식으로 하는 것은 맞았으나 이렇게 되면 2번째 튜플부터 ', '가 맨 앞에 포함이 되기 때문에 문제가 생겨서 해당 부분을 잘라내는 로직을 추가했습니다.
sb도 새로운 생성자로 재정의 했으나 메모리 문제가 생길거 같아 찾아보니 setLength(0)라는 것으로 강제로 길이를 잘라내는 식으로 메모리 사용도 줄일 수 있었습니다.
또한 answer도 list나 배열로 받으려 했으나 이 경우 포함 여부를 한 번 더 찾아내야 해서 Set 중 순서를 기억하는 LinkedHashSet을 사용해 해결했습니다.
'Beakjoon&프로그래머스 > Java' 카테고리의 다른 글
| [프로그래머스/Java] [1차] 뉴스 클러스터링 (0) | 2026.03.28 |
|---|---|
| [백준/Java] 10604번 Working Hours (0) | 2026.03.28 |
| [백준/Java] 33257번 상현이의 물리학및실험1 실험 대작전 (0) | 2026.03.27 |
| [프로그래머스/Java] 롤케이크 자르기 (0) | 2026.03.26 |
| [프로그래머스/Java] 개인정보 수집 유효기간 (0) | 2026.03.26 |