코딩테스트

[프로그래머스] 자바(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로 설정
    1. 예를 들어, "모자"와 "안경"이 주어졌다면, "모자"와 "안경"의 개수를 각각 세어야 함
    2. 이를 위해 `HashMap`을 사용
      1. clothes[i][1]을 key로 설정하고, 그에 맞는 카운트를 value로 설정
      2. `getOrDefault`: 찾는 key가 존재하면 key의 value 값을 반환하고, 없으면 defaultValue 값을 반환
        1. 여기서 `defaultValue`를 0이 아닌 1로 설정한 이유는 "안 입는 경우"도 고려해야 하기 때문
종류 이름
얼굴 동그란 안경, 검정 선글라스, 안 입음
상의 파란색 티셔츠, 안 입음
하의 청바지, 안 입음
겉옷 긴 코드, 안 입음
  • 각 종류의 의상 개수를 곱하여 모든 조합의 수 구하기
    1. `map.values()` 를 반복문으로 순회하면서 모든 조합의 수를 구함
  • 모든 의상을 안 입는 경우는 조건에 충족하지 않으므로 제외 후 결과값 return

 

🧠 배운 점

  • 이 문제를 통해 "안 입는 경우"를 처음부터 고려하여 +1을 하는 방식으로 조합을 계산하는 방법을 알게 되었습니다.
  • 모든 조합을 최대한으로 고려한 후, "모두 안 입는 경우"를 제외하는 방법으로 문제를 풀 수 있음을 깨달았습니다.