코딩테스트
[프로그래머스] 자바(Java) - 의상
수방방
2024. 6. 30. 21:16
🧩 문제
https://school.programmers.co.kr/learn/courses/30/lessons/42578
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
💡 내가 작성한 코드
import java.util.*;
class Solution {
public int solution(String[][] clothes) {
int answer = 1;
HashMap<String, Integer> map = new HashMap<>();
for(int i = 0; i < clothes.length; i++){
map.put(clothes[i][1], map.getOrDefault(clothes[i][1], 1) + 1);
}
for(Integer value : map.values()) {
answer *= value;
}
return answer - 1;
}
}
- 의상의 종류를 key로 설정하고, 해당 종류의 의상 개수를 value로 설정
- 예를 들어, "모자"와 "안경"이 주어졌다면, "모자"와 "안경"의 개수를 각각 세어야 함
- 이를 위해 `HashMap`을 사용
- clothes[i][1]을 key로 설정하고, 그에 맞는 카운트를 value로 설정
- `getOrDefault`: 찾는 key가 존재하면 key의 value 값을 반환하고, 없으면 defaultValue 값을 반환
- 여기서 `defaultValue`를 0이 아닌 1로 설정한 이유는 "안 입는 경우"도 고려해야 하기 때문
종류 | 이름 |
얼굴 | 동그란 안경, 검정 선글라스, 안 입음 |
상의 | 파란색 티셔츠, 안 입음 |
하의 | 청바지, 안 입음 |
겉옷 | 긴 코드, 안 입음 |
- 각 종류의 의상 개수를 곱하여 모든 조합의 수 구하기
- `map.values()` 를 반복문으로 순회하면서 모든 조합의 수를 구함
- 모든 의상을 안 입는 경우는 조건에 충족하지 않으므로 제외 후 결과값 return
🧠 배운 점
- 이 문제를 통해 "안 입는 경우"를 처음부터 고려하여 +1을 하는 방식으로 조합을 계산하는 방법을 알게 되었습니다.
- 모든 조합을 최대한으로 고려한 후, "모두 안 입는 경우"를 제외하는 방법으로 문제를 풀 수 있음을 깨달았습니다.