[Programmers] : 해시 > 위장 > JAVA
- 💾 알고리즘/프로그래머스
- 2021. 8. 6. 17:36
🔗 문제 링크
https://programmers.co.kr/learn/courses/30/lessons/42578
코딩테스트 연습 - 위장
programmers.co.kr
📝 풀이
종류별로 같은 이름의 옷은 없으므로 HashMap<종류(String),등장횟수(Integer)>을 이용하여 풀어보았습니다. 처음 등장하는 Key는 등장 횟수를 1로 설정하고, 그 이후 등장 부터는 기존 값에 1을 더하는 방식으로 구현하였습니다.
입을 수 있는 옷 종류의 수는 각 종류별로 선택할지 안 할지 여부(+1)를 포함하여 아래와 같은 방식으로 구할 수 있습니다. (A종류 옷 가지수 + 1)*(B종류 옷 가지수 + 1)*(C종류 옷 가지수 + 1) - 1
마지막의 -1은 아무것도 선택하지 않은 경우는 없어야하므로 제외 해준 것입니다.
코드로 구현할 때는 향상된 for문의 .values() 메소드를 활용하여 value 값을 간편하게 불러와 계산하였습니다.
💻 코드
public static int solution(String[][] clothes) {
int answer = 1;
HashMap<String,Integer> m = new HashMap<>();
for (int i = 0; i < clothes.length; i++) {
String val = clothes[i][0];
String key = clothes[i][1];
if(m.containsKey(key)){
m.put(key, ( m.get(key) + 1));
}else{
m.put(key, 1);
}
}
System.out.println(m);
System.out.println("size = " + m.size());
for(String key : m.keySet()){
answer *= (m.get(key) + 1);
}
return answer-1;
}
💻 다른풀이
역시 스트림 공부 필수인듯...
import java.util.*;
import static java.util.stream.Collectors.*;
class Solution {
public int solution(String[][] clothes) {
return Arrays.stream(clothes)
.collect(groupingBy(p -> p[1], mapping(p -> p[0], counting())))
.values()
.stream()
.collect(reducing(1L, (x, y) -> x * (y + 1))).intValue() - 1;
}
}
'💾 알고리즘 > 프로그래머스' 카테고리의 다른 글
[Programmers] : 위클리 챌린지 > 최소직사각형 > JAVA (0) | 2021.11.01 |
---|---|
[Programmers] : 2021 KAKAO > 메뉴 리뉴얼 > JAVA (0) | 2021.10.23 |
[Programmers] : 해시 > 전화번호 목록 > JAVA (0) | 2021.08.05 |
[Programmers] : 해시 > 완주하지 못한 선수 (0) | 2021.07.30 |
[Programmers] : 스택/큐 :: 주식가격 (0) | 2021.07.26 |