본문 바로가기
PROGRAMMERS

튜플

by 김ㅋㅋㅋ 2021. 7. 15.

기본 원리 


원소의 순서가 바뀌어도 되기 때문에 복잡해 보이지만 
순서를 알파벳 순서대로 정렬한다면 쉽게 이해할 수 있습니다.


(a) 튜플은 {{a}}

 

(a,b) 튜플은 {{a}, {a,b}}

(a,b,c) 튜플은 {{a},{a,b},{a,b,c}}
.

.

.
반복


(a,b,d,c,e) => {{a},{a,b},{a,b,c},{a,b,c,d},{a,b,c,d,e}}

 

문제에선 집합을 주면 튜플을 구하라고 하였으므로

{{a},{a,b},{a,b,c},{a,b,c,d},{a,b,c,d,e}}가 주어지면 [a,b,c,d,e]를 반환하면 됩니다.

 

관계를 찾아보면 튜플의 첫 번째인 a는 모든 집합에 포함됩니다.

두 번째인 b는 1개짜리 집합을 제외한 모든 집합에 포함됩니다.

 

즉, 주어진 문자열에서 제일 많이 포함되는 숫자가 튜플의 첫 번째가 될 것이고

그다음이 두 번째, 그다음은 세 번째... 반복 1개짜리가 튜플의 마지막이 될 것입니다.

 

풀이 순서


주어진 문자열에서 괄호 삭제

',' 쉼표로 split 하여 각 숫자들의 개수를 구하면 끝.
 
 
맵으로 카운트하는 방식 사용
map.put( 숫자, 개수++ );
 
이 맵을 통해 answer에 값들을 넣어서 반환하면 됩니다.
answer[숫자의 총 개수 - 개수] = 숫자;

※배열의 인덱스 값을 (숫자의 총 개수 - 개수)로 한 이유 : 인덱스 값을 제일 개수가 많은 것부터 역순으로 넣기 위해서입니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
int[] answer = {};
HashMap<Integer,Integer> map = new HashMap<Integer, Integer>();
        
String[] strArray = s.replaceAll("\\{|\\}","").split(",");
        
for(String str : strArray) {
    int key = Integer.parseInt(str);
    int cnt = map.get(key) != null ? map.get(key) + 1 : 1;
    map.put(key,cnt);
}
        
answer = new int[map.size()];
for(Entry<Integer, Integer> set : map.entrySet()) {
    answer[map.size() - set.getValue()] = set.getKey();
}
        
return answer;
cs

'PROGRAMMERS' 카테고리의 다른 글

신고 결과 받기  (0) 2022.05.20
예상 대진표  (0) 2021.05.05
행렬 테두리 회전하기  (0) 2021.04.30
큰 수 만들기  (0) 2021.04.23
프린터  (0) 2021.04.09

댓글