해시를 잘 이용하면 어려운 문제는 아니다.
저번에 풀었던 프로그래머스 - 완주하지 못한 선수 문제에서 해시맵의 getOrDefault 메서드를 이용해서 키가 해시맵에 삽입된 횟수를 계산하는 방식이 떠올라서 이번 문제도 이를 이용하여 풀었다.
https://developerwoohyeon.tistory.com/155
프로그래머스 - 완주하지 못한 선수(Java)
해시맵 클래스가 제공하는 함수를 적절히 사용해야 해시를 활용하여 풀 수 있었던 문제였다 정렬을 활용하여 검색import java.util.*;class Solution { public String solution(String[] participant, String[] completion) {
developerwoohyeon.tistory.com
문제 풀이
ex)
[["yellow_hat", "headgear"], ["blue_sunglasses", "eyewear"], ["green_turban", "headgear"]]
우선 옷의 종류를 Key로 하고, 옷의 이름을 Value로 하여 HashMap에 삽입해준다.
삽입하면서 Key에 해당하는 값이 이미 HashMap에 있으면 Value를 1 증가 시켜서 옷의 종류의 갯수를 카운트 해준다.
int size=clothes.length;
HashMap<String, Integer> hm = new HashMap<>();
for(int i=0; i<size; i++){
hm.put(clothes[i][1],hm.getOrDefault(clothes[i][1],0)+1);
}
이러면 HashMap에 다음과 같이 저장 된다.
headgear , 2
eyewear , 1
이제 이 HashMap을 이용하여 모든 조합의 수를 구해야 한다.
// 모든 조합의 수 계산
int answer = 1; // 곱셈을 위해 1로 초기화
for (int count : hm.values()) {
answer *= (count + 1); // 각 종류에서 입지 않는 경우 포함
}
return answer - 1; // 아무것도 입지 않는 경우 제외
<전체 코드>
import java.util.*;
class Solution {
public int solution(String[][] clothes) {
int size=clothes.length;
HashMap<String, Integer> hm = new HashMap<>();
for(int i=0; i<size; i++){
hm.put(clothes[i][1],hm.getOrDefault(clothes[i][1],0)+1);
}
// 모든 조합의 수 계산
int answer = 1; // 곱셈을 위해 1로 초기화
for (int count : hm.values()) {
answer *= (count + 1); // 각 종류에서 입지 않는 경우 포함
}
return answer - 1; // 아무것도 입지 않는 경우 제외
}
}
2025 - 02 - 25 풀이
import java.util.*;
class Solution {
public int solution(String[][] clothes) {
HashMap<String, Integer> map = new HashMap<>();
for(String[] row : clothes){
if(map.containsKey(row[1])){
int n = map.get(row[1]);
map.replace(row[1],n+1);
}else{
map.put(row[1],1);
}
}
int answer =1;
for(int count : map.values()){
answer = answer * (count+1); //안입는 경우를 추가하기 위해 +1
}
return answer-1; //둘다 안입는 경우를 빼줘야 함
}
}
'알고리즘 > 해시' 카테고리의 다른 글
프로그래머스 - 전화번호 목록(Java) (0) | 2025.01.06 |
---|---|
프로그래머스 - 완주하지 못한 선수(Java) (0) | 2025.01.05 |
프로그래머스 - 포켓몬(Java) (1) | 2025.01.04 |