[ 다먹살 ]/- Coding

[프로그래머스] 레벨2 튜플

엉망으로살기 2021. 8. 23. 15:04
반응형

https://programmers.co.kr/learn/courses/30/lessons/64065?language=java 

 

코딩테스트 연습 - 튜플

"{{2},{2,1},{2,1,3},{2,1,3,4}}" [2, 1, 3, 4] "{{1,2,3},{2,1},{1,2,4,3},{2}}" [2, 1, 3, 4] "{{4,2,3},{3},{2,3,4,1},{2,3}}" [3, 2, 4, 1]

programmers.co.kr

 


 

난이도에 비해 문제 설명이 엄청 길다. 이 튜플이라는 자료형은 자바에는 없고 예전에 파이썬을 잠깐할 때 다뤄봤던 기억이 난다. 어쨌든 정의상 제일 중요한 건 중복에 대한 허용이 가능하고, 순서에 영향을 받는다는 점이다.

 

그리고 문제해결을 위한 접근은 다음과 같다. 

1. 입력받는 문자열 s를 전처리한다. (substring, replace, trim 등)

2. 원소를 구분할 수 있는 기호를 찾아 원소별로 나눠 배열에 저장한다.

3. 배열을 문자열의 길이로 오름차순 정렬한다.

4. 첫 번째 원소부터 차례대로 순회하며 결과를 출력한다.

  4-1. 결과를 출력하기 위한 리스트를 만들고, 여기에 저장한다.

  4-2. 단, 기존 리스트에 있지 않은 숫자만 저장한다.

 


 

문제

 

제한사항 및 입출력

 


 

코드

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;

class Solution
{
    public int[] solution(String s)
    {
        s = s.substring(2, s.length()-2); // {{}} 제거
        s = s.replace("},{", "/"); // 원소 단위별 구분자 생성
        s = s.trim(); // 공백 제거

        // 구분자별 원소로 단어 나누기
        String [] words = s.split("/");
        
        // 단어 길이별 정렬
        Arrays.sort(words, new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                return o1.length() - o2.length();
            }
        });

        // 결과 출력용 리스트 생성
        ArrayList<Integer> list = new ArrayList<>();
        
        // 리스트에 원소넣기
        for(int i=0; i<words.length; i++)
        {
            // 원소별 , 로 숫자 나누기
            String[] compare = words[i].split(",");

            for(int j=0; j<compare.length; j++)
            {
                int num = Integer.parseInt(compare[j]);

                //리스트에 숫자가 없을 경우, 새로 추가
                if(!list.contains(num))
                {
                    list.add(num);
                }
            }
        }

        // 결과 출력
        int[] answer = new int[list.size()];
        
        for(int i=0; i<list.size(); i++)
        {
            answer[i] = list.get(i);
        }

        return answer;
    }
}

 

반응형