[JAVA 문제 풀이] 315. 튜플

프로그래머스 (64065)
Stupefyee's avatar
Jun 12, 2025
[JAVA 문제 풀이] 315. 튜플
notion image
notion image
 

내가 작성한 코드

import java.util.*; import java.util.regex.*; class Solution { public int[] solution(String s) { // 정규 표현식을 이용하여 숫자 그룹 추출 List<Set<Integer>> sets = new ArrayList<>(); Matcher matcher = Pattern.compile("\\{([\\d,]+)\\}").matcher(s); // 중괄호 사이의 숫자 그룹을 찾기 위한 정규 표현식 // 정규 표현식에 매칭되는 부분을 찾고, 각 그룹을 Set으로 변환하여 리스트에 추가 while (matcher.find()) { Set<Integer> set = new HashSet<>(); for (String num : matcher.group(1).split(",")) { set.add(Integer.parseInt(num)); } sets.add(set); } // 집합을 크기 순으로 정렬 sets.sort(Comparator.comparingInt(Set::size)); List<Integer> result = new ArrayList<>(); // 결과를 저장할 리스트 Set<Integer> seen = new HashSet<>(); // 이미 본 숫자를 저장할 셋셋 // 튜플 순서 찾기 for (Set<Integer> set : sets) { for (int num : set) { if (!seen.contains(num)) { result.add(num); seen.add(num); break; } } } // 리스트를 배열로 변환하여 반환 return result.stream().mapToInt(Integer::intValue).toArray(); } }
 

다른 사람의 코드

import java.util.*; class Solution { public int[] solution(String s) { Set<String> set = new HashSet<>(); // 중복 제거를 위한 Set // 문자열에서 중괄호 제거 및 분리 String[] arr = s.replaceAll("[{]", " ").replaceAll("[}]", " ").trim().split(" , "); // 각 문자열 길이 오름 차순 정렬 // Arrays.sort(arr, Comparator.comparingInt(String::length)); Arrays.sort(arr, (a, b) -> { return a.length() - b.length(); }); int[] answer = new int[arr.length]; int idx = 0; for (String s1 : arr) { for (String s2 : s1.split(",")) { if (set.add(s2)) // 중복된 숫자는 추가하지 않음 answer[idx++] = Integer.parseInt(s2); // 문자열을 정수로 변환하여 배열에 저장 } } return answer; } }
 
Share article

stupefyee