코딩 테스트

(Java) 프로그래머스 튜플

로승리 2021. 12. 21. 00:03

문제가 복잡하게 쓰여있는데 차근히 읽어보니 어렵지 않았다.

풀이 방법은 바로 보이는데 String으로 넘어오는 s를 어떻게 배열로 변환할지 생각하는데 시간을 많이 썼다.


최종 코드

import java.util.*;
class Solution {
    public int[] solution(String s) {
        int[] answer = {};
                // s의 맨 앞 {{ 부분 자르기
        s = s.substring(2, s.length());
        // s의 맨 뒤 }} 부분 자르고 },{ 부분 -로 변경
        s = s.substring(0, s.length()-2).replace("},{", "-");
        // -을 기준으로 자르기
        String[] temp = s.split("-");
        // 람다를 이용해서 길이별로 정렬
        Arrays.sort(temp, (a,b) -> (a.length()-b.length()));

        // 튜플을 위한 리스트 생성
        List<Integer> list = new ArrayList<>();

        for(String a : temp) {
            // ,을 기준으로 다시 나누기
            String[] temp2 = a.split(",");
            for (int i = 0; i < temp2.length; i++) {
                int n = Integer.parseInt(temp2[i]);
                // 튜플에 값이 없다면
                if(!list.contains(n)) {
                    list.add(n);
                }
            }
        }
        answer = list.stream().mapToInt(i -> i).toArray();
        return answer;
    }
}