Mini
[틀림] [Java] 프로그래머스 튜플 // 문자열, LinkedHashSet 본문
https://school.programmers.co.kr/learn/courses/30/lessons/64065
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
* 시도1
잘한점 : 숫자1개부터 size를 1개씩 증가시키면서 새로나온 숫자들만 answer에 담으면 최적해임.
일단 밖의 {}를 제거하고, 괄호가 나올때까지 보고... 숫자들을 배열에 저장?
그후, 중복되는것을 완전탐색으로 제거하고... 너무 복잡, 시간복잡도도 터질것 같은데?
풀이
1. 일단 {{ }}를 모두제거한다.
2. 이후, " },{ " 기준으로 분할하면 깔끔하게 숫자만 추출할 수 있다.
참고로 }는 메타문자이기때문에 앞에 \\ 2개를 붙여줘야한다.
3. 길이순으로 정렬한다.
4. LinkedHashSet을 사용하면, 삽입시 중복을 자동으로 제거해준다. && for문에서 돌릴때 넣은 순서대로 나옴이 보장된다.
5. LinkedHashSet을 순회하면서 answer배열에 넣는다.
전체코드
import java.util.*;
class Solution {
static ArrayList<Integer> v = new ArrayList<>();
public int[] solution(String s) {
// 1) 외부 중괄호 제거
String trimmed = s.substring(2, s.length() - 2);
// System.out.println(trimmed);
// 2) "},{"로 분리하여 각 집합 문자열 획득
String[] parts = trimmed.split("\\},\\{");
// for(String part : parts){
// System.out.println(part);
// }
// 3) 원소 개수 기준으로 정렬
Arrays.sort(parts, new Comparator<String>() {
@Override
public int compare(String a, String b) {
return a.length() - b.length();
}
});
// 4) 순서대로 숫자 추출
LinkedHashSet<Integer> set = new LinkedHashSet<>();
for (String part : parts) {
String[] nums = part.split(",");
for (String num : nums) {
set.add(Integer.parseInt(num));
}
}
// 5) LinkedHashSet을 int[]로 변환
int[] answer = new int[set.size()];
int idx = 0;
for (int num : set) {
answer[idx++] = num;
}
return answer;
}
}
'Algorithm > 문자열' 카테고리의 다른 글
[틀림] [자바] 프로그래머스 수식최대화 // 문자열, 구현, 링크드리스트 (0) | 2025.05.11 |
---|---|
[틀림] 프로그래머스 괄호변환 // 문자열 substr, 재귀, 시키는대로 (0) | 2025.04.05 |
[틀림] 프로그래머스 문자열 압축 // 문자열, 구현 (0) | 2025.03.12 |
[알고리즘] 백준 15353 큰수 // 문자열, 덧셈 (0) | 2025.01.19 |
프로그래머스 k진수에서 소수개수구하기 c++ //core dumped 해결방법, 소수판별알고리즘, k진법 변환 알고리즘 (0) | 2023.12.08 |