프로그래머스 코딩테스트 level2에 해당하는 문제이다.
처음에 문제보고 당황했다...
그럼 스파이는 오늘 바지를 안입은거야..?
아무것도 안입고 모자만 쓰고 나가도 되는거야...?
스파이야 변태야?
hash문제이므로 HashMap을 사용하였다.
import java.util.*;
class Solution {
public int solution(String[][] clothes) {
int answer = 1;
HashMap<String, Integer> hm = new HashMap<String, Integer>();
for(int i = 0; i < clothes.length; i++)
hm.put(clothes[i][1], hm.getOrDefault(clothes[i][1], 0) + 1);
for(String key : hm.keySet())
answer *= hm.get(key) + 1;
return --answer;
}
}
hashmap을 단순하게 clothes배열과 대입하여 생각할 수 있다.
옷의 이름을 key로, 옷의 종류를 value로 지정할 수 있지만, 이 문제에서는 옷 종류의 갯수가 중요하기 때문에 이렇게 풀면 안된다.
고등학교때 배웠던 경우의 수 문제 풀이 방법을 생각해보자.
A학교 학생이 3명이 있고 B학교 학생이 2명이 있고 두 학교에 각각 한명 이하의 학생을 선정하여 같이 소풍을 가야한다고 하면
(A학생의 수+1) * (B학생의 수+1)-1 로 표현할 수 있다.
즉 답은 (3+1)*(2+1)-1= 11가지의 조합으로 소풍을 갈 수 있다.
위와 같은 식을 인지하고 코딩을 시작해야 한다.
이 문제에서 제일 중요한 것은 옷의 종류의 개수를 아는 것이다. 따라서 hashmap을 사용할때 옷의 종류의 숫자를 알도록 설정해야한다.
저번 문제를 풀때 getOrDefault라는 메소드를 다시 공부하였다.
key값을 조사하여 해당 key값이 존재하지 않으면 defaultvalue로 값을 넘긴다.
hashmap의 key는 옷의 종류가 되고 , value는 그 옷 종류에 해당하는 옷의 개수를 의미한다.
여기까지 오면 위의 설명대로 계산식을 세워주면 끝!
'Computer Engineering > 알고리즘 테스트' 카테고리의 다른 글
프로그래머스 코딩테스트 문제: 전화번호 목록 (0) | 2020.03.10 |
---|---|
프로그래머스 코딩테스트 문제: 정수 내림차순으로 배치하기 (0) | 2020.03.07 |
프로그래머스 코딩테스트 문제: K번째수 (0) | 2020.03.06 |
프로그래머스 코딩테스트 문제: 완주하지 못한 선수 (0) | 2020.03.06 |
프로그래머스 코딩테스트 문제: 폰켓몬 (0) | 2020.03.05 |