본문 바로가기
Misc 🗿/Problem Solving

[프로그래머스] 알고리즘 고득점 kit - 의상 (Hash)

by dudefromkorea 2024. 1. 18.

문제링크: https://school.programmers.co.kr/learn/courses/30/lessons/42578

 

 

<문제에서 제시된 조건>

•  코니는 최소 한 개의 의상은 입는다

  •  코니는 카테고리당 최대 1가지 의상만 착용할 수 있다

  •  한 가지의 의상이라도 다를 경우 다른 착장으로 계산한다

 

 

<접근 방법>

 •   카테고리를 key 로 가지는 HashMap 을 생성

 •   각 카테고리에 의상 갯수를 value 값으로 넣기

 

 

<풀이 로직>

간단한 경우의 수를 구하는 로직 구현

예) 상의 2개, 하의 3개일 경우 2 X 3 = 6

 

 

<고려할 사항>

•   아무 의상도 선택하지 않는 경우

•    특정 카테고리에서 선택을 하나도 안 하는 경우

 

 

<코드 작성>

1단계

카테고리별로 의상들을 담을 HashMap 을 생성

각 카테고리마다 의상들의 갯수를 순차적으로 대입

(신규 카테고리일 경우 0으로 초기화 후 +1) - getOrDefault

HashMap<String, Integer> clothesCntByCategory = new HashMap<>(); // 옷들을 담을 옷장

for (String[] getCategory : clothes) {
	String category = getCategory[1]; // clothes[i][1]에 접근하여 카테고리 추출
	// 신규 or 기존 카테고리에 의상 추가
	clothesCntByCategory.put(category, clothesCntByCategory.getOrDefault(category, 0) + 1); 
}

 

2단계

(카테고리당 의상의 갯수 + 1)을 곱하고

(해당 카테고리에서 선택을 안 하는 경우)

아무것도 안 입게 되는 경우는 배제

int answer = 1; // 곱셈을 위해 1로 초기화

for (int clothesCnt : clothesCntByCategory.values()) {
	answer *= (clothesCnt + 1); // 카테고리 별 의상 갯수 + 1(아무것도 안 입는 경우의 수)
}

return answer - 1; // 하나도 안 입는 경우의 수 배제

 

 

 

 


 

 

Answer Code

import java.util.HashMap;

class Solution {
	public int solution(String[][] clothes) {

		HashMap<String, Integer> clothesCntByCategory = new HashMap<>(); // 옷들을 담을 옷장

		for (String[] getCategory : clothes) {
			String category = getCategory[1]; // clothes[i][1]에 접근하여 카테고리 추춣 
			// 신규 or 기존 카테고리에 의상 추가
			clothesCntByCategory.put(category, clothesCntByCategory.getOrDefault(category, 0) + 1); 
		}

		int answer = 1; // 곱셈을 위해 1로 초기화

		for (int clothesCnt : clothesCntByCategory.values()) {
			answer *= (clothesCnt + 1); // 카테고리 별 의상 갯수 + 1(아무것도 안 입는 경우의 수)
		}

		return answer - 1; // 하나도 안 입는 경우의 수 배제
	}
}

 

728x90
반응형