알고리즘/프로그래머스 Level2

[프로그래머스,자바] Level2: 튜플

류창 2021. 11. 6. 21:13
반응형

문제분석

 

문제를 잘 이해해야한다. 입력으로 튜플의 집합들이 주어진다.

 

튜플의 집합들은  원래튜플의 원소갯수만큼 존재한다.

 

-> 부모튜플의 원소갯수=4개, 입력으로 주어지는 집합갯수 =4개

 

 

문제목표: 입력으로 주어지는 튜플집합들을통해, 부모튜플을구하기

 

 

튜플은 원소의 순서가 다르면, 다른 튜플이므로 원소들의 순서를 중요시해야한다.

 

그러면 어떻게 튜플의 원소의 순서를 알수있을까??

 

-> 입력으로 주어지는 집합들의 길이가 적은순서대로 원소를넣자. (정렬해주기)

-> 길이가 1인 집합은 첫번째원소다.

-> 길이가 2인 집합은 첫번째원소 + 두번째원소의 형태다.

-> 길이가 3인 집합은 길이가 2인집합 +세번째원소다.

...

 

자동으로 알아서 중복을 제거해주고 입력 순서대로 나열해주는 Set배열이 아주 찰떡궁합이다.

 

 

입력으로 주어지는 튜플의 집합들은 문자열로 주어진다...

 

따라서 이 문자열을 집합형태로 올바르게 Split해야한다.

 

필자는 우선, 2차원 집합을 벗겨내기위해, subString(1,s.length()-1)을 하였다.

 

그후  }, 로 스플릿을 해주었다.  , 로 스플릿을하면 우리가 원하는 집합의 형태로 분리가안된다.

 

분리를 완료했다면, 아직 벗겨내지못한 괄호를 replace로 정리한다.

 

 tuple[i]=tuple[i].replace("{","");   
 tuple[i]=tuple[i].replace("}","");  

 

요렇게 정리해도 괜찮다. 괄호가 2개라서. 하지만 정규표현식에 빠삭한분은

tuple[i]=tuple[i].replaceAll("[{}]",""); 

 

요렇게 한번에 정리할수가있다.

 

문제풀이

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import java.util.*;
class Solution {
    public int[] solution(String s) {
        Set<String> set =new LinkedHashSet<>();
        String[] tuple=s.substring(1,s.length()-1).split("},");
        for(int i=0;i<tuple.length;i++){
            tuple[i]=tuple[i].replace("{","");   
            tuple[i]=tuple[i].replace("}","");
            //tuple[i]=tuple[i].replaceAll("[{}]",""); 
        }
        Arrays.sort(tuple,(a,b)->(a.length()-b.length()));
        for(String data:tuple){
            String[] arr=data.split(",");
            for(String data2:arr){
                set.add(data2);
            }
        }
        int[] answer=new int[set.size()];
        int cnt=0;
        for(String data:set){
            answer[cnt++]=Integer.parseInt(data);
        }
        
        return answer;
    }
}
cs

 

 

반응형