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
- LEVEL2
- java
- 자바
- 프로그래머스
- Spring
- programmers
- 코틀린
- DP
- kotlin
- 운영체제
- DFS
- 그래프
- backtracking
- lambda
- back-end
- 자료구조
- 스프링
- 프로젝트
- 백트래킹
- BFS
- algorithm
- 알고리즘
- 네트워크
- Brute-force
- TDD
- baekjoon
- Java8
- OS
- 모던자바
- 백준
Archives
- Today
- Total
요깨비's LAB
[프로그래머스, Java] 메뉴 리뉴얼 본문
풀이 힌트는 결국 인터넷을 통해 알게 되었으며 구현만큼은 스스로의 힘으로 구현하였습니다.
import java.util.*;
class Solution {
public static int orderLen;
public static Map<Integer, Map<String, Element>> map = new HashMap<>();
public String[] solution(String[] orders, int[] course) {
String[] answer;
int ordersLen = orders.length;
for (String order : orders) {
char[] carr = order.toCharArray();
Arrays.sort(carr);
orderLen = order.length();
for (int i = 0; i < orderLen; i++) {
makeCombination(carr, new StringBuilder().append(carr[i]), orderLen, 1, i + 1);
}
}
List<String> results = new ArrayList<>();
for (int c : course) {
if (map.getOrDefault(c, null) == null)
continue;
Iterator<String> itr = map.get(c).keySet().iterator();
List<Element> elements = new ArrayList<>();
while (itr.hasNext()) {
String key = itr.next();
if (map.get(c).get(key).count >= 2) {
elements.add(map.get(c).get(key));
}
}
if (elements.isEmpty()) {
continue;
}
elements.sort((Element e1, Element e2) -> {
if (e1.count < e2.count) {
return 1;
} else if (e1.count > e2.count) {
return -1;
} else {
return 0;
}
});
int max = elements.get(0).count;
for (Element element : elements) {
if (element.count != max) {
break;
} else {
results.add(element.id);
}
}
}
int resultSize = results.size();
answer = new String[resultSize];
results.sort((String s1, String s2) -> {
if (s1.compareTo(s2) > 0) {
return 1;
} else if (s1.compareTo(s2) < 0) {
return -1;
} else {
return 0;
}
});
for (int i = 0; i < resultSize; i++) {
answer[i] = results.get(i);
}
return answer;
}
// nCr
public void makeCombination(char[] carr, StringBuilder element, int n, int count, int index) {
if (orderLen < index) {
return;
}
if (count < 2) {
for (int i = index; i < orderLen; i++) {
makeCombination(carr, element.append(carr[i]), n, count + 1, i + 1);
element.deleteCharAt(count);
}
} else {
if (map.getOrDefault(count, null) == null) {
map.put(count, new HashMap<>());
Map<String, Element> m = map.get(count);
String key = element.toString();
if (m.getOrDefault(key, null) == null) {
m.put(key, new Element(key, 1));
} else {
Element e = m.get(key);
e.count++;
m.replace(key, e);
}
} else {
Map<String, Element> m = map.get(count);
String key = element.toString();
if (m.getOrDefault(key, null) == null) {
m.put(key, new Element(key, 1));
} else {
Element e = m.get(key);
e.count++;
m.replace(key, e);
}
}
for (int i = index; i < orderLen; i++) {
makeCombination(carr, element.append(carr[i]), n, count + 1, i + 1);
element.deleteCharAt(count);
}
}
}
class Element {
String id;
Integer count;
public Element(String id, Integer count) {
this.id = id;
this.count = count;
}
}
}
'알고리즘(Java) > 프로그래머스' 카테고리의 다른 글
[프로그래머스, Java] 자물쇠와 열쇠 (0) | 2021.09.23 |
---|---|
[프로그래머스, Java] 거리두기 확인하기 (0) | 2021.09.09 |
[프로그래머스, JAVA] 행렬 테두리 회전하기 (0) | 2021.06.15 |
[프로그래머스, JAVA] 뉴스 클러스터링 (0) | 2021.06.14 |
[프로그래머스, JAVA] 단체사진 찍기 (0) | 2021.06.05 |
Comments