본문 바로가기

프로그래머스(Java)/Level 2

[프로그래머스] 튜플

728x90

코드 힌트

문제 이해:

  • 주어진 문자열 s는 여러 집합들이 포함된 문자열이며, 이 집합들은 중복된 요소를 가질 수 있습니다. 이 문제의 목표는 집합들에서 요소를 추출하여 특정 순서로 배열을 구성하는 것입니다.
  • 집합들은 {}로 감싸져 있으며, 이를 파싱하고 각 집합의 길이를 기준으로 정렬한 후 요소들을 추출해야 합니다.

세부 설명:

  • 먼저, 문자열 s를 파싱하여 집합들의 배열로 변환해야 합니다. 이를 위해 불필요한 문자를 제거하고, 문자열을 구분자로 분할합니다.
  • 집합들의 배열을 길이순으로 정렬합니다. 이렇게 하면, 작은 집합부터 순차적으로 큰 집합의 요소를 추출할 수 있습니다.
  • Set 자료구조를 사용하여 이미 추가된 요소를 추적하며, 중복되지 않은 요소만 결과 배열에 추가합니다.

알고리즘:

  1. 문자열에서 처음과 끝의 불필요한 {{와 }}를 제거하고, 각 집합을 구분하는 },{를 기준으로 문자열을 나눕니다.
  2. 나눈 문자열 배열을 길이 순서대로 정렬합니다. 이렇게 하면 각 집합의 길이 순으로 요소를 처리할 수 있습니다.
  3. 정렬된 각 집합에서 요소를 추출하고, Set을 사용하여 중복되지 않은 새로운 요소만 결과 배열에 추가합니다.
  4. 최종적으로 요소들이 저장된 배열을 반환합니다.

 


정답은 더보기 클릭

더보기
import java.util.*;

class Solution {
    public int[] solution(String s) {
        // 중복을 피하기 위해 Set 사용
        Set<String> set = new HashSet<>();
        
        // 입력 문자열에서 불필요한 부분을 제거하고, 각 집합을 배열로 분리
        String[] arr = s.substring(2, s.length() - 2).split("\\},\\{");
        
        // 결과를 저장할 배열 초기화
        int[] result = new int[arr.length];
        
        // 각 집합을 길이 순서대로 정렬
        Arrays.sort(arr, (o1, o2) -> o1.length() - o2.length());
        
        int index = 0;
        
        // 정렬된 집합들에서 요소 추출
        for (String str1 : arr) {
            // 각 집합에서 요소를 쉼표로 구분하여 분리
            for (String str2 : str1.split(",")) {
                // 새로운 요소일 때만 결과 배열에 추가
                if (set.add(str2))
                    result[index++] = Integer.parseInt(str2);
            }
        }
        
        // 최종 배열 반환
        return result;
    }
}
728x90