티스토리 뷰
프로그래머스 (programmers) 코딩테스트 고득점 Kit 해시 #3 - 위장
1. 문제 설명
스파이들은 매일 다른 옷을 조합하여 입어 자신을 위장합니다.
예를 들어 스파이가 가진 옷이 아래와 같고 오늘 스파이가 동그란 안경, 긴 코트, 파란색 티셔츠를 입었다면 다음날은 청바지를 추가로 입거나 동그란 안경 대신 검정 선글라스를 착용하거나 해야 합니다.
종류 이름
얼굴 동그란 안경, 검정 선글라스
상의 파란색 티셔츠
하의 청바지
겉옷 긴 코트
스파이가 가진 의상들이 담긴 2차원 배열 clothes가 주어질 때 서로 다른 옷의 조합의 수를 return 하도록 solution 함수를 작성해주세요.
2. 제한사항
clothes의 각 행은 [의상의 이름, 의상의 종류]로 이루어져 있습니다.
스파이가 가진 의상의 수는 1개 이상 30개 이하입니다.
같은 이름을 가진 의상은 존재하지 않습니다.
clothes의 모든 원소는 문자열로 이루어져 있습니다.
모든 문자열의 길이는 1 이상 20 이하인 자연수이고 알파벳 소문자 또는 '_' 로만 이루어져 있습니다.
스파이는 하루에 최소 한 개의 의상은 입습니다.
3. 입출력 예
4. 입출력 예 설명
예제 #1
headgear에 해당하는 의상이 yellow_hat, green_turban이고 eyewear에 해당하는 의상이 blue_sunglasses이므로 아래와 같이 5개의 조합이 가능합니다.
1. yellow_hat
2. blue_sunglasses
3. green_turban
4. yellow_hat + blue_sunglasses
5. green_turban + blue_sunglasses
예제 #2
face에 해당하는 의상이 crow_mask, blue_sunglasses, smoky_makeup이므로 아래와 같이 3개의 조합이 가능합니다.
1. crow_mask
2. blue_sunglasses
3. smoky_makeup
5. 나의 풀이
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | import java.util.HashMap; class Solution { public int solution(String[][] clothes) { HashMap<String, Integer> hm = new HashMap<String, Integer>(); for (int i = 0; i < clothes.length; i++) { if (hm.containsKey(clothes[i][1])) hm.replace(clothes[i][1], hm.get(clothes[i][1])+1); else hm.put(clothes[i][1], 1); } int answer = 1; for (int value : hm.values()) { answer*=(value+1); } answer-=1; return answer; } } | cs |
6. 배운 점
의류의 이름이 Input으로 들어오지만 정답을 구하는데 크게 중요하지 않아 그냥 Integer로 그 수만 표현하면 훨씬 간단해 질 수 있는 문제였습니다.
'개발 일지 > 알고리즘 공부' 카테고리의 다른 글
[프로그래머스/코딩테스트 고득점 Kit/스택/큐#2] 프린터 (Java) (2) | 2019.02.03 |
---|---|
[프로그래머스/코딩테스트 고득점 Kit/스택/큐#1] 쇠막대기 (Java) (0) | 2019.01.07 |
[프로그래머스/코딩테스트 고득점 Kit/해시#4] 베스트 앨범 (Java) (0) | 2018.12.19 |
[프로그래머스/코딩테스트 고득점 Kit/해시#2] 전화번호 목록 (Java) (0) | 2018.12.11 |
[프로그래머스/코딩테스트 고득점 Kit/해시#1] 완주하지 못한 선수 (Java) (2) | 2018.12.10 |