Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 자바
- 알고리즘
- Brute-force
- 그래프
- DFS
- lambda
- LEVEL2
- BFS
- 모던자바
- 코틀린
- backtracking
- TDD
- Java8
- OS
- 프로그래머스
- Spring
- 스프링
- kotlin
- 자료구조
- programmers
- 백준
- baekjoon
- 백트래킹
- 네트워크
- java
- 운영체제
- algorithm
- DP
- 프로젝트
- back-end
Archives
- Today
- Total
요깨비's LAB
[프로그래머스, Java] 튜플 본문
1. 문자열 구분이 필요 "{" "," "}" 별로 수행해야하는 로직을 정의해서 구현
2. 주어지는 값이 중복이 없고, 길이도 제각각 (a3, a2, a4, a1) 요런식으로 다르게 주어지므로 List<List<Integer>> 선택
3. 하지만 List<List<Integer>>를 listSize별로 정렬할건데 성능 개선을 위해 연산을 하면서 listSize를 미리 증가 연산을 해서 리스트 정렬하기 위해 리스트 전체를 카운트하지 않도록 구현
4. 이를 위해 List, 리스트크기를 담는 Element 클래스를 작성
5. 이후는 코드 내용과 그대로 진행
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
class Solution {
public int[] solution(String s) {
int[] answer = {2, 1, 3, 4};
int sLen = s.length();
List<Element> numSet = new ArrayList<>();
List<Integer> list = new ArrayList<>();
StringBuilder sb = new StringBuilder();
int listSize = 0;
for (int i = 1; i < sLen - 1; i++) {
if (s.charAt(i) == '{') {
list = new ArrayList<>();
listSize = 0;
sb = new StringBuilder();
} else if (s.charAt(i) == ',') {
if (s.charAt(i - 1) == '}')
continue;
list.add(Integer.valueOf(sb.toString()));
sb = new StringBuilder();
listSize++;
} else if (s.charAt(i) == '}') {
list.add(Integer.valueOf(sb.toString()));
sb = new StringBuilder();
listSize++;
numSet.add(new Element(list, listSize));
} else {
sb.append(s.charAt(i));
}
}
numSet.sort((Element e1, Element e2) -> e1.listSize - e2.listSize);
Map<Integer, Integer> checkMap = new HashMap<>();
List<Integer> result = new ArrayList<>();
for (Element element : numSet) {
element.list.forEach(e -> {
if (checkMap.getOrDefault(e, -1) == -1) {
checkMap.put(e, 1);
result.add(e);
}
});
}
int resultSize = result.size();
answer = new int[resultSize];
for (int i = 0; i < resultSize; i++) {
answer[i] = result.get(i);
}
return answer;
}
class Element {
List<Integer> list = new ArrayList<>();
int listSize = 0;
public Element(List<Integer> list, int listSize) {
this.list = list;
this.listSize = listSize;
}
}
}
'알고리즘(Java) > 프로그래머스' 카테고리의 다른 글
[프로그래머스, Java] 비밀지도 (0) | 2022.01.08 |
---|---|
[프로그래머스, Java] 로또의 최고순위와 최저순위 (0) | 2022.01.06 |
[프로그래머스, Java] 수식 최대화 (0) | 2021.10.15 |
[프로그래머스, Java] 자물쇠와 열쇠 (0) | 2021.09.23 |
[프로그래머스, Java] 거리두기 확인하기 (0) | 2021.09.09 |
Comments