문제
https://school.programmers.co.kr/learn/courses/30/lessons/42578
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
리뷰
프로그래머스 코딩테스트 고득점 Kit에서 해시로 분류되어 있는 문제이다. 푸는 방법은 아주 간단하나, 주어진 테스트케이스만 보고 문제를 제대로 읽지 않아서 삽질을 했다. (의상 종류는 "headgear", "eyewear", "face"만 있는 게 아니다...)
덧붙여 HashMap 관련된 메서드들을 새롭게 알게 됐다.
containsKey(k)
: 해시맵에 k라는 키가 존재하면 true, 존재하지 않으면 false 반환한다.put(k, v)
: 해시맵에 k=v쌍을 추가한다. k가 이미 존재하면 v로 업데이트한다.replace(k, v)
: 해시맵의 k에 대한 값을 v로 업데이트한다. k가 존재하지 않으면 null을 반환한다.keySet()
: 해시맵의 키들만 반환한다.entrySet()
: 해시맵의 '키=값` 쌍들을 반환한다.
이 문제에서 사용한 것은 containsKey()
, put()
, keySet()
이다.
풀이
이 문제는 의상을 조합하는 경우의 수만 구하면 된다. 따라서 의상의 이름은 중요하지 않고, 종류 별로 몇 개의 의상이 있는지만 중요하다.
따라서 HashMap에 <의상의 종류 = 의상의 수> 형태로 데이터를 저장한다.
그리고 다음 조건을 고려하여 경우의 수를 구하면 된다.
- 각 의상 종류에서 하나씩만 입을 수 있으며, 입지 않을 수도 있다.
- 모든 의상 종류에 대해서 아무것도 입지 않으면 안 된다.
따라서 경우의 수를 계산할 때는 아래와 같이 각 의상의 종류에 "착용하지 않음"이라는 경우도 고려해야 한다.

또한 모두 착용하지 않는 경우가 1개 존재하므로, 경우의 수에서 1을 빼면 된다.
코드
import java.util.HashMap;
class Solution {
public int solution(String[][] clothes) {
int answer = 1;
// HashMap에 '의상의 종류=의상의 수` 형태로 데이터를 저장함
HashMap<String, Integer> clothesMap = new HashMap<>();
for(String[] cur:clothes){
if(clothesMap.containsKey(cur[1]))
clothesMap.put(cur[1], clothesMap.get(cur[1])+1);
else
clothesMap.put(cur[1],1);
}
// 경우의 수 계산
for(String k: clothesMap.keySet()){
answer*=(clothesMap.get(k)+1);
}
return answer-1;
}
}
'Problem Solving' 카테고리의 다른 글
[프로그래머스/Lv.2] 광물 캐기 - Python (0) | 2024.03.19 |
---|---|
[프로그래머스/Lv.1] 개인정보 수집 유효기간 - Python (0) | 2024.02.28 |
[프로그래머스/Lv.2] H-Index - Java (0) | 2023.04.28 |
[프로그래머스/Lv.0] 옹알이(1) - Java (0) | 2023.04.27 |
[프로그래머스/Lv.2] 소수 찾기 - Java (0) | 2023.04.26 |
문제
https://school.programmers.co.kr/learn/courses/30/lessons/42578
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
리뷰
프로그래머스 코딩테스트 고득점 Kit에서 해시로 분류되어 있는 문제이다. 푸는 방법은 아주 간단하나, 주어진 테스트케이스만 보고 문제를 제대로 읽지 않아서 삽질을 했다. (의상 종류는 "headgear", "eyewear", "face"만 있는 게 아니다...)
덧붙여 HashMap 관련된 메서드들을 새롭게 알게 됐다.
containsKey(k)
: 해시맵에 k라는 키가 존재하면 true, 존재하지 않으면 false 반환한다.put(k, v)
: 해시맵에 k=v쌍을 추가한다. k가 이미 존재하면 v로 업데이트한다.replace(k, v)
: 해시맵의 k에 대한 값을 v로 업데이트한다. k가 존재하지 않으면 null을 반환한다.keySet()
: 해시맵의 키들만 반환한다.entrySet()
: 해시맵의 '키=값` 쌍들을 반환한다.
이 문제에서 사용한 것은 containsKey()
, put()
, keySet()
이다.
풀이
이 문제는 의상을 조합하는 경우의 수만 구하면 된다. 따라서 의상의 이름은 중요하지 않고, 종류 별로 몇 개의 의상이 있는지만 중요하다.
따라서 HashMap에 <의상의 종류 = 의상의 수> 형태로 데이터를 저장한다.
그리고 다음 조건을 고려하여 경우의 수를 구하면 된다.
- 각 의상 종류에서 하나씩만 입을 수 있으며, 입지 않을 수도 있다.
- 모든 의상 종류에 대해서 아무것도 입지 않으면 안 된다.
따라서 경우의 수를 계산할 때는 아래와 같이 각 의상의 종류에 "착용하지 않음"이라는 경우도 고려해야 한다.

또한 모두 착용하지 않는 경우가 1개 존재하므로, 경우의 수에서 1을 빼면 된다.
코드
import java.util.HashMap;
class Solution {
public int solution(String[][] clothes) {
int answer = 1;
// HashMap에 '의상의 종류=의상의 수` 형태로 데이터를 저장함
HashMap<String, Integer> clothesMap = new HashMap<>();
for(String[] cur:clothes){
if(clothesMap.containsKey(cur[1]))
clothesMap.put(cur[1], clothesMap.get(cur[1])+1);
else
clothesMap.put(cur[1],1);
}
// 경우의 수 계산
for(String k: clothesMap.keySet()){
answer*=(clothesMap.get(k)+1);
}
return answer-1;
}
}
'Problem Solving' 카테고리의 다른 글
[프로그래머스/Lv.2] 광물 캐기 - Python (0) | 2024.03.19 |
---|---|
[프로그래머스/Lv.1] 개인정보 수집 유효기간 - Python (0) | 2024.02.28 |
[프로그래머스/Lv.2] H-Index - Java (0) | 2023.04.28 |
[프로그래머스/Lv.0] 옹알이(1) - Java (0) | 2023.04.27 |
[프로그래머스/Lv.2] 소수 찾기 - Java (0) | 2023.04.26 |