[프로그래머스] 튜플

Salki·2021년 3월 11일
0

알고리즘

목록 보기
9/10

프로그래머스 문제

요새 자바스크립트 공부하고 알고리즘을 문제 풀다가 코딩 테스트 준비겸 자바로 간만에 알고리즘 문제를 풀어보는데 까먹은 것들이 많다.
자바도 미니 프로젝트 이외에도 알고리즘을 풀어보는 연습을 지속해서 해야될 듯 싶다.

import java.util.*;

class info implements Comparable<info>{
       String s;
       int length;
       info(String s, int length)
       {
           this.s = s;
           this.length = length;
       }
       @Override
       public int compareTo(info o)
       {
           return Integer.compare(this.length, o.length);
       }
       
   }
class Solution {
   
    
    public int[] solution(String s) {
        int[] answer = {};
        
        String[] arr = s.split("},");
        int[] lengthArr = new int[arr.length];
        ArrayList<info> infoArr = new ArrayList<info>();
        for(int i=0; i<arr.length; i++)
        {
            arr[i] = arr[i].replace("{","");
            arr[i] = arr[i].replace("}","");
            infoArr.add(new info(arr[i], arr[i].length()));
        }
        Collections.sort(infoArr);
        Set<String> tmpSet = new HashSet<>();
        ArrayList<String> resultArr = new ArrayList<>();
        for(int i=0; i<infoArr.size(); i++)
        {
            String[] tmpNum = infoArr.get(i).s.split(",");
            for(int j=0; j<tmpNum.length; j++)
            {
                // System.out.println(tmpNum[j]);
                if(!resultArr.contains(tmpNum[j]))
                    resultArr.add(tmpNum[j]);
            }
        }
        
        answer = new int[resultArr.size()];
        for(int i=0; i<resultArr.size(); i++)
        {
            answer[i] = Integer.parseInt(resultArr.get(i));
        }
         
        return answer;
    }
}

상당히 코드가 지저분하다.
우선 입력받은 s문자열에서 }, 로 split 하여서 집합을 나누었다. 그 다음 집합에서 숫자 이외에 특수문자를 제거하기 위해 replace를 사용하였다. info라는 객체를 만들고 sort하기 쉽게 compareTo를 재정의 하였다.
문제에서 순서에 맞는 튜플을 찾기 위해서는 제일 길이가 작은 집합 부터 숫자를 추가해주기 위해서 집합의 length를 기준으로 sort하였다.
그 뒤 집합안에서 다시 ,를 기준으로 split하여 원소들을 체크하고 새로 만든 resultArr 리스트에 넣어주는 식으로 문제를 해결하였다.

profile
실력있는 개발자로 거듭나기까지..

0개의 댓글