티스토리 뷰
반응형
문제설명
스파이들은 매일 다른 옷을 조합하여 입어 자신을 위장합니다.
예를 들어 스파이가 가진 옷이 아래와 같고 오늘 스파이가 동그란 안경, 긴 코트, 파란색 티셔츠를 입었다면 다음날은 청바지를 추가로 입거나 동그란 안경 대신 검정 선글라스를 착용하거나 해야 합니다.
스파이가 가진 의상들이 담긴 2차원 배열 clothes가 주어질 때 서로 다른 옷의 조합의 수를 return 하도록 solution 함수를 작성해주세요.
제한사항
- clothes의 각 행은 [의상의 이름, 의상의 종류]로 이루어져 있습니다.
- 스파이가 가진 의상의 수는 1개 이상 30개 이하입니다.
- 같은 이름을 가진 의상은 존재하지 않습니다.
- clothes의 모든 원소는 문자열로 이루어져 있습니다.
- 모든 문자열의 길이는 1 이상 20 이하인 자연수이고 알파벳 소문자 또는 '_' 로만 이루어져 있습니다.
- 스파이는 하루에 최소 한 개의 의상은 입습니다.
public static int solution(String[][] clothes) {
String arr[] = new String[clothes.length];
int k = 0;
int answer = 1;
HashMap<String, String> ht = new HashMap<String, String>();
HashMap<String, Integer> ht2 = new HashMap<String, Integer>();
for (int a = 0; a < clothes.length; a++) {
ht.putIfAbsent(clothes[a][1], clothes[a][0]);// 들어있는게 없으면 집어넣음
if (!ht.get(clothes[a][1]).equals(clothes[a][0])) {// 이것이 같은 카테고리의 첫번쨰가 아니라면
ht2.put(clothes[a][1], ht2.get(clothes[a][1]) + 1);// ht2에도 같은 카테고리의 밸류를 +1해서 덮어씌우고
} else {// 같은카테고리의 첫번쨰라면
ht2.put(clothes[a][1], 1);// ht2에 카테고리 밸류를 1로 해서 집어넣음
arr[k] = clothes[a][1];// 배열에는 카테고리의 중복되지 않은 이름들이담기고
k++;// k변수에는 중복하지 않은 카테고리 갯수를 담음
}
}
// arr[]에 각 카테고리의 카운트를 구했는데 구하는방법이 두가지임
// 예를들면 2, 1, 3 이런식이면 -> 카테고리의 갯수 즉 3에다가 + 2*1 + 2*3 + 1*3 + 2*1*3 이렇게 요소끼리의 곱을 다 더 하는방법과
// 각 요소에 +1씩해서 3*2*4를 한다음에 아무것도 없을경우를 제외해서 -1 해주는방법
for (int i = 0; i < k; i++) {// 중복하지 않은 카테고리 갯수만큼 반복
answer = answer * (ht2.get(arr[i]) + 1);
}
return answer - 1;
}
해시맵 두개에 배열 하나 쓸만한 문제였나 싶긴하다. 효율적으로 푼거같지는 않다.
불필요한거 정리하기 귀찮아서 그냥올림
1. 옷의 갯수만큼 반복하며, 첫번째 해시맵에 key 로 착용하는 부위, value에 옷이름을 넣어둔다.
//이미 들어가있으면 들어가지 않게함
2. 직후에 if문으로 방금넣은값이 첫번째값인지 판단한다.
//여기부터 ht는 사용되지않음
3. 방금넣은값이 그 카테고리의 첫번째라면 value에 1을넣고 arr[k]에 key를 넣어주고 k를 1 더해줌
//이 k값은 arr의 진짜 길이가 될것이고 arr에는 헤드기어, 아이웨어등 카테고리가 중복되지 않게 들어감
4. 첫번째가 아니라면 value+1해줌
5. 위에 포문이끝나면 arr에는 카테고리의 이름들이 담기고, ht2에는 각 카테고리를 키값으로 각각의 수량이 들어가있을것임
6. 여기서 답을 구하는방법이 두가지임 위에 주석 참고
7. 더 효율적인 방법으로 답구함
반응형
'알고리즘' 카테고리의 다른 글
알고리즘)[JAVA] 프로그래머스_해시_전화번호 목록(Level 2) (0) | 2020.02.16 |
---|---|
알고리즘)[JAVA] 프로그래머스_해시_베스트앨범(Level 3) (0) | 2020.02.16 |
알고리즘)[JAVA] 프로그래머스_해시_완주하지 못한선수(Level 1) (0) | 2020.02.14 |
알고리즘)[JAVA] 백준알고리즘_10930 -SHA-256 (0) | 2020.02.13 |
알고리즘)[JAVA] 백준알고리즘_10927-MD5 (0) | 2020.02.13 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- flutter
- RecyclerView
- password
- chatting
- springboot
- Git
- mysql
- 안드로이드스튜디오
- 알고리즘
- django server
- 에러해결
- github
- Django
- Android Studio
- flame
- socket.io
- redis
- 플러터
- Kotlin
- Android
- Hummingbird
- DART
- 코틀린
- WAS
- 해결
- 에러
- CHANNELS
- Tutorial
- 안드로이드
- node.js
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함