티스토리 뷰
반응형
https://programmers.co.kr/learn/courses/30/lessons/64065
import java.util.*;
import java.util.stream.Collectors;
class Solution {
public int[] solution(String s) {
Tuple tuple = new Tuple(s);
return tuple.mappingCountToChunks().getValue();
}
public static class Tuple {
private final String[] chunk;
private int maxSize = 0;
private final Map<Integer,Set<Integer>> map;
public Tuple(String s) {
s = s.replace("{{", "");
s = s.replace("}}", "");
this.chunk = s.split("[}][,][{]");
this.map = new HashMap<>();
}
public Tuple mappingCountToChunks() {
for (String ch : chunk) {
String[] parts = ch.split(",");
Set<String> set = new HashSet<>(List.of(parts));
Set<Integer> v =set.stream().map(Integer::valueOf).collect(Collectors.toSet());
map.put(parts.length,v);
maxSize = Math.max(maxSize,parts.length);
}
return this;
}
public int[] getValue() {
int[] answer = new int[maxSize];
for (int i=maxSize;i>=1;i--) {
Set<Integer> right = map.get(i);
Set<Integer> left = map.get(i-1);
if (left != null)
right.removeAll(left);
answer[i-1] = right.iterator().next();
}
return answer;
}
}
}
이 문제에서 제가 생각한 핵심 자료형은 Set 이었습니다. 그 이유는 현 위치와 바로 그 전의 위치에서의 차집합을 구하면 우리가 원하는 값을 찾을 수 있기 때문입니다.
여기에서 A를 {2,1,3,4}라고 하고 B를 {2,1,3}이라고 하겠습니다.
이때 A-B를 하면 {4}가 나오는데 이 때 4번째 위치 값이 4인 것을 알 수가 있습니다.
그러면 이제 풀이에서 나온 메서드 들에 대하여 설명해보겠습니다.
Tuple
생성자로서 주어진 문자열에 대해서 파싱을 하고 그에 대한 결과 값을 chunk 에 넣는 작업을 진행합니다.
mappingCountToChunks
파싱한 문자열을 크기에 따라 Map 자료형에 넣는 작업을 해줍니다.
getValue
값을 구하는 메서드로서 제일 큰 Set부터 시작하여 작은 순으로 시작합니다.
이 때 주의해야 할 점은 마지막에는 left 가 null이기 때문에 removeAll을 하면 에러가 난다는 것에 유의해야 합니다.
반응형
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] [자바] [카카오] 뉴스 클러스터링 (0) | 2021.12.15 |
---|---|
[프로그래머스][카카오] 메뉴 리뉴얼 (0) | 2021.12.14 |
[프로그래머스] [JAVA] 단체 사진 찍기 (0) | 2021.12.10 |
[프로그래머스] [JAVA] 카카오프렌즈 컬러링북 (0) | 2021.12.09 |
[프로그래머스] [자바] [카카오] 추석 트래픽 (0) | 2021.12.08 |
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 자바
- ubuntu
- 2021 KAKAO BLIND RECRUITMENT
- Python
- BFS
- postgres
- 프로그래머스
- 면접
- docker-compose
- Linux
- env
- Command Line
- Java
- Spring
- 알고리즘
- 그래프
- Pattern
- dockerignore
- DRF
- Celery
- thread
- setattr
- headers
- docker
- Collections
- 카카오
- PostgreSQL
- 파이썬
- 백준
- django
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 27 | 28 |
29 | 30 | 31 |
글 보관함