문제
번호
위장(프로그래머스 42578번)
내용
스파이들은 매일 다른 옷을 조합하여 입어 자신을 위장합니다.
예를 들어 스파이가 가진 옷이 아래와 같고 오늘 스파이가 동그란 안경, 긴 코트, 파란색 티셔츠를 입었다면 다음날은 청바지를 추가로 입거나 동그란 안경 대신 검정 선글라스를 착용하거나 해야 합니다.
종류 | 이름 |
얼굴 | 동그란 안경, 검정 선글라스 |
상의 | 파란색 티셔츠 |
하의 | 청바지 |
겉옷 | 긴 코트 |
스파이가 가진 의상들이 담긴 2차원 배열 clothes가 주어질 때 서로 다른 옷의 조합의 수를 return 하도록 solution 함수를 작성해주세요.
언어
JAVA
풀이
처음 시도한 코드
모든 조합을 array에 담고 요소의 개수를 구할까 생각을 해보았다.
그러나 이 방법은 조합 array를 구하는데 걸리는 시간이 불필요하게 소비될 것 같아 포기하였다.
해결방법
입력할 때 2차원 배열이 입려고디며, 각 요소는 [의상 이름, 의상 종류]로 구성되어 있다.
이는 의상의 종류로 의상의 이름을 분류해야 하는데, 의상 종류는 String 타입이며 답을 도출해내는 데에는 의상의 이름은 불필요하다. 그저 개수만 있으면 된다.
따라서 <pre><String, Integer></pre>쌍의 <pre>Map</pre>을 이용하여 의상의 종류에 따라 개수를 늘리면 된다.
코드 설명
- <pre>Map<String, Integer></pre>을 선언하여 의상의 종류별로 개수를 담을 것을 준비한다.
- 첫번 째 <pre>for</pre>문을 통해 입력으로 들어온 <pre>clothes</pre>의 종류별로 개수를 추가한다. 이 때 해당 종류가 처음 나온 경우 개수를 증가시키는 것이 아닌 1로 설정해야 하므로 <pre>if</pre>를 통하여 해당 기능을 구현하였다.
- 두번 째 <pre>for</pre>문을 통해 분류된 의상을 가지고 가능한 경우의 수를 구한다. 해당 종류를 입지 않는 경우도 있으므로 <pre>value</pre>에 <pre>+ 1</pre>을 하여 <pre>answer</pre>에 곱한다. 이 때 <pre>Map</pre>의 <pre>value</pre>에 빠르게 접근하기 위해 <pre>iterator</pre>을 이용하였다.
코드
import java.util.HashMap;
import java.util.Map;
public class hash_level3 {
static class Solution {
public int solution(String[][] clothes) {
int answer = 1;
Map<String, Integer> count = new HashMap<String, Integer>();
for(int i = 0 ; i < clothes.length ; i++) {
if(count.containsKey(clothes[i][1])) {
count.put(clothes[i][1], count.get(clothes[i][1]) + 1);
}
else {
count.put(clothes[i][1], 1);
}
}
for(Integer value : count.values()) {
answer *= value + 1;
}
return answer - 1;
}
}
public static void main(String[] args) {
// Run test case.
Solution solution = new Solution();
String[][] arr = {{"yellow_hat", "headgear"}, {"blue_sunglasses", "eyewear"}, {"green_turban", "headgear"},
{"crow_mask", "face"}, {"blue_sunglasses", "face"}, {"smoky_makeup", "face"}};
System.out.println(solution.solution(arr));
System.out.println("answer : 23");
}
}
'Etc > 문제 풀이' 카테고리의 다른 글
[프로그래머스 42586번] 기능개발 (0) | 2021.01.31 |
---|---|
[프로그래머스 42584번] 주식가격 (0) | 2021.01.30 |
[프로그래머스 42579번] 베스트앨범 (0) | 2021.01.28 |
[프로그래머스 42577번] 전화번호 목록 (0) | 2021.01.26 |
[프로그래머스 42576번] 완주하지 못한 선수 (0) | 2021.01.26 |
댓글