TIL (Today I Learned)

99클럽 코테 스터디 6일차 TIL + 오늘의 학습 키워드

남 희 2024. 7. 27. 23:27

☑️ 문제: 의상

https://school.programmers.co.kr/learn/courses/30/lessons/42578

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

☑️ 핵심

의상의 종류가 몇 개고, 각 의상의 종류가 가지고 있는 의상의 개수를 구하는 게 포인트
answer = (종류1의 의상 개수 + 1(안 입는 경우)) * ... * (종류n의 의상 개수 + 1) - 1(아무 것도 안 입는 경우)

 

☑️ 풀이 과정 (주석과 코드)

import java.util.Map;
import java.util.HashMap;
import java.util.Collection;

class Solution {
    public int solution(String[][] clothes) {
        // 의상의 종류가 몇 개고,
        // 각 의상의 종류가 가지고 있는 의상의 개수를 구하는 게 포인트.
        Map<String, Integer> map = new HashMap<>();
        for (int i = 0; i < clothes.length; i++) {
            String category = clothes[i][1];
            if (!map.containsKey(category)) {                
                map.put(category, 1);
            } else {                
                map.put(category, map.get(category) + 1);
            }
        }
        
        // (종류1의 의상 개수 + 1(안 입는 경우)) * ... * (종류n의 의상 개수 + 1) - 1(아무 것도 안 입는 경우)
        int answer = 0;
        Collection<Integer> values = map.values();        
        for (Integer value : values) {
            if (answer == 0) {
                answer = value + 1;
            } else {
                answer *= (value + 1);
            }
        }
        return answer - 1;
    }
}

아쉬운점: HashMap이 익숙하지 않아서 코드가 깔끔하지 않은 것 같다.

 

☑️ 다른 사람 풀이 참고

stream을 사용하는 방법:

stream, collect, values를 적절하게 사용해서 line 5개로 해결하셨다. 

 

☑️ 복습

HashMap에서 사용해보았던 메서드

  • Map.containsKey(key)
  • Map.put(key, value)
  • Map.get(key)
  • Collection<Integer> values = map.values(); // 모든 value 얻기
  • Map.Entry<String, Integer> entry : map.entrySet() // 모든 key, value 얻기

map value에 ++a 이렇게 쓰니까 컴파일 에러 나더라.