문제 설명 |
|
스파이들은 매일 다른 옷을 조합하여 입어 자신을 위장합니다. 예를 들어 스파이가 가진 옷이 아래와 같고 오늘 스파이가 동그란 안경, 긴 코트, 파란색 티셔츠를 입었다면 다음날은 청바지를 추가로 입거나 동그란 안경 대신 검정 선글라스를 착용하거나 해야 합니다. |
|
종류 | 이름 |
얼굴 | 동그란 안경, 검정 선글라스 |
상의 | 파란색 티셔츠 |
하의 | 청바지 |
겉옷 | 긴 코트 |
스파이가 가진 의상들이 담긴 2차원 배열 clothes가 주어질 때 서로 다른 옷의 조합의 수를 return 하도록 solution 함수를 작성해주세요. |
제한 조건 |
|
입출력 예 |
|
clothes | return |
[["yellow_hat", "headgear"], ["blue_sunglasses", "eyewear"], ["green_turban", "headgear"]] | 5 |
[["crow_mask", "face"], ["blue_sunglasses", "face"], ["smoky_makeup", "face"]] | 3 |
|
결국 나는 포기...
map 혹은 조합을 사용해서 이것저것 해보았으나...
진짜 도저히 모르겠다 ㅠㅠ
내가 제일 싫어한게 확통이었어 ㅠㅜㅠㅠㅠㅠ😪
JAVA1 코드 정리
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;
}
}
* reduce() : 엘리먼트를 비교하고 컬렉션에서 하나의 값으로 연산
결국은 뒤에서 정리할 JAVA2의 코드를 stream을 이용하여 한줄로 풀었다. 음... 대충 어느 풀이이다 감은 오는데 잘 모르겠는 ㅠㅜ |
JAVA2 코드 정리
2ssue.github.io/algorithm/programmers_42578/
1. 옷의 종류를 map의 키로 지정하고 종류의 개수를 value로 넣는다. (map.get(clothes[i][1])+1)
2. 경우의 수를 구한다.
3. 하나도 안 입는 경우는 없으므로 answer에서 -1을 해주고 리턴한다.
import java.util.HashMap;
class Solution {
public int solution(String[][] clothes) {
int answer = 1;
HashMap<String, Integer> map = new HashMap<>();
for(int i = 0; i < clothes.length; i++) {
if(map.get(clothes[i][1]) == null)
map.put(clothes[i][1], 1);
else
map.put(clothes[i][1], map.get(clothes[i][1]) + 1);
}
for(String keys: map.keySet()) {
answer *= (map.get(keys) + 1);
}
answer -= 1;
return answer;
}
}
경우의 수와 map만 이용한다면 참 간단하게 풀리는 문제였구나... 괜히 이상한데서 삽질 한 것 같다 ㅠㅜ map을 이용해서 옷 종류의 개수를 구할 생각은 못했다. |
'프로그래머스 > Java | Level2' 카테고리의 다른 글
[프로그래머스/Java]Level2 - 124 나라의 숫자 (0) | 2021.04.30 |
---|---|
[프로그래머스/Java]Level2 - 다리를 지나는 트럭 (0) | 2021.02.28 |
[프로그래머스/Java]Level2 - 주식가격 (0) | 2021.01.27 |
[프로그래머스/Java]Level2 - 전화번호 목록 (0) | 2021.01.27 |
[프로그래머스/Java]Level2 - 기능개발 (0) | 2021.01.26 |