[Java] 프로그래머스 : 튜플

728x90

[Java] 프로그래머스 : 튜플

https://school.programmers.co.kr/learn/courses/30/lessons/64065

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


접근

두 케이스가 어떻게 [2, 1, 3, 4]로 같은 값이 나오게 구현할 것인지 알아내는 것이 어려웠던 문제였다.

집합은 원소의 순서가 바뀌어도 상관없다는 문제의 조건 때문에 두 케이스는 같은 결과가 나올 수 있었다.

 

만약 두번째 케이스를 각 집합의 길이를 기준으로 오름차순 정렬하면 아래와 같다.

{{2},{2,1},{1,2,3},{1,2,4,3}}

 

반복문으로 각 집합을 순회하면서 집합 내의 원소가 정답 배열에 존재하지 않는 경우 배열에 추가하는 식으로 구현하면 [2, 1, 3, 4] 배열을 구현할 수 있었다.

 

 

코드

import java.util.*;
class Solution {
    public List<Integer> solution(String s) {
        List<Integer> answer = new ArrayList<>();
        
        String tempStr = s.substring(2, s.length());
        String tempStr2 = tempStr.substring(0, tempStr.length() - 2)
            .replace("},{", "-");
        
        String[] tempArr = tempStr2.split("-");
        Arrays.sort(tempArr, new Comparator<String>() {
            public int compare(String o1, String o2) {
                return Integer.compare(o1.length(), o2.length());
            }
        });
        
        for (String t : tempArr) {
            String[] temp = t.split(",");
            
            for (int i = 0; i < temp.length; i++) {
                int n = Integer.parseInt(temp[i]);
                if (!answer.contains(n)) {
                    answer.add(n);
                }
            }
        }
        
        return answer;
    }
}
728x90