본문 바로가기
알고리즘/PROGRAMMERS

튜플(Lv.2)

by 현대타운301 2024. 3. 22.

 


 

문제 설명

 

 

 

입출력 예시

 

 

요약

해당 문자열을 통해 튜플 구하기

* 여기서 튜플은 정해진 순서가 있고 중복되는 숫자가 없음

 


 

풀이

 

접근 방식

1. 문자열에서 서로 크기가 다른 집합을 떼서 배열에 담는다.

  → {{20, 111}, {111}} : {20, 111}과 {111}로 split

 

2. 해당 집합을 요소로 갖는 배열을 문자열의 길이 순으로 정렬한다.

  → Arrays.sort()에 람다식을 통한 정렬

 

3. set에 하나씩 담는다.

  → 두 번째 요소부터는 "," 기준으로 split후 하나씩 담기

 


 

코드리뷰

 

import java.util.*;

class Solution {
    public int[] solution(String s) {
        HashSet<Integer> set = new LinkedHashSet<>();
        List<Integer> answerList = new ArrayList<>();
        s = s.replaceAll("[{]", "");
        s = s.replace("}}", "");
        String[] arr1 = s.split("},");	// arr1 = {"2", "2, 1", "2, 1, 3", ...} 과 같이 담김
        Arrays.sort(arr1, (String s1, String s2) -> s1.length() - s2.length());	// 람다식을 통해 length() 순으로 정렬
        
        for(int i = 0; i < arr1.length; i++) {
            if(i == 0) {
                set.add(Integer.valueOf(arr1[i]));	// 첫 번째 요소는 split할 게 없음
            } else {
                String[] arr2 = arr1[i].split(",");	// 두 번째 부터 split(",")
                for(String str : arr2) {
                    set.add(Integer.valueOf(str));	// 하나씩 순서대로 set에 담기
                }
            }
        }
        for(int i : set) {
            answerList.add(i);	// LinkedHashSet에 순서대로 담겨있는 배열을 list에 옮김
        }
        int[] answer = new int[set.size()];
        for(int i = 0; i < answer.length; i++) {
            answer[i] = answerList.get(i);
        }
        return answer;
    }
}

 

 

 

'알고리즘 > PROGRAMMERS' 카테고리의 다른 글

캐시(Lv.2)  (0) 2024.03.22
기능개발(Lv.2)  (1) 2024.03.22
피로도(Lv.2)  (0) 2024.03.22
프로세스(Lv.2)  (0) 2024.03.22
전화번호 목록(Lv.2)  (0) 2024.03.22