728x90
[Java] 프로그래머스 : 의상
https://school.programmers.co.kr/learn/courses/30/lessons/42578
접근
HashMap으로 정리한다고 가정하면, 예제 1은 다음과 같이 정리된다.
headgear : ["yellow_hat", "green-turban"]
eyewear : ["blue-sunglasses"]
문제 조건에 의해 의상은 종류별로 1개씩만 입을 수 있고, 특정 종류의 옷을 입지 않는 것도 가능하다.
그러나 최소 한 개의 의상은 입어야 한다.
headgear에 대해 다음과 같은 경우의 수가 나타난다.
1. "yellow_hat"을 입는다.
2. "green_turban"을 입는다.
3. 아무것도 안입는다.
eyewear에 대해 다음과 같은 경우의 수가 나타난다.
1. "blue_sunglasses"를 입는다.
2. 아무것도 안입는다.
두 항목에 대해서의 모든 경우의 수는 3x2 = 6이 된다.
그러나 최소 한 개 이상의 옷을 입어야 하기 때문에 headgear-아무것도 안입는다, eyewear-아무것도 안입는다 의 경우를 제외해야 한다.
풀이1
import java.util.*;
class Solution {
public int solution(String[][] clothes) {
int answer = 1;
HashMap<String, List<String>> map = new HashMap<>();
for (String[] cloth: clothes) {
String sort = cloth[1];
List<String> keyCheck = map.get(sort);
if (keyCheck == null) {
keyCheck = new ArrayList<>();
map.put(sort, keyCheck);
}
keyCheck.add(cloth[0]);
}
for (String key : map.keySet()) {
answer *= map.get(key).size() + 1;
}
return answer - 1;
}
}
풀이2
문제 조건에 따르면 같은 이름을 가진 의상은 존재하지 않기 때문에 map에서 의상에 대한 처리를 할 때 String 대신 Integer로 처리해도 상관이 없다.
경우의 수를 구하기 위해 해당 의상 종류에 몇 개의 의상이 있는지만 파악하면 되기 때문이다.
import java.util.*;
class Solution {
public int solution(String[][] clothes) {
int answer = 1;
HashMap<String, Integer> map = new HashMap<>();
for (String[] clothe : clothes) {
String sort = clothe[1];
map.put(sort, map.getOrDefault(sort, 0) + 1);
}
Iterator<Integer> it = map.values().iterator();
while(it.hasNext())
answer *= it.next().intValue() + 1;
return answer - 1;
}
}
728x90
'알고리즘 문제 풀이' 카테고리의 다른 글
[Java] 프로그래머스 : n^2 배열 자르기 (0) | 2023.08.30 |
---|---|
[Java] 프로그래머스 : 괄호 회전하기 (0) | 2023.08.28 |
[Java] 프로그래머스 : 예상 대진표 (0) | 2023.08.25 |
[Java] 프로그래머스 : 구명보트 (0) | 2023.08.23 |
[Java] 프로그래머스 : 크레인 인형뽑기 게임 (0) | 2023.08.07 |