문제분석
문제를 잘 이해해야한다. 입력으로 튜플의 집합들이 주어진다.
튜플의 집합들은 원래튜플의 원소갯수만큼 존재한다.
-> 부모튜플의 원소갯수=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 |
'알고리즘 > 프로그래머스 Level2' 카테고리의 다른 글
[프로그래머스,자바] Level2: 전화번호 목록 (2021년 업데이트) (0) | 2021.11.08 |
---|---|
[프로그래머스,자바] Level2: 괄호 회전하기 (0) | 2021.11.07 |
[프로그래머스,Java] Level2: 수식 최대화 (0) | 2021.11.04 |
[프로그래머스,Java] Level2: 거리두기 확인하기 (0) | 2021.11.03 |
[프로그래머스,자바] Level2: 뉴스 클러스터링 (0) | 2021.11.03 |