본문 바로가기
Programmers

[Java] 프로그래머스 : 위장(Hash)

by 엘딘 2022. 6. 24.

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

 

코딩테스트 연습 - 위장

 

programmers.co.kr

 

Hash

HashMap<Integer, String> map = new HashMap();

map.put(1, "바나나");
map.put(2, "사과");
map.put(3, "딸기");

// 전체 데이터
System.out.println(map.toString());

// key값
Set<Integer> keyset = map.keySet();
System.out.println(keyset.toString());

// value값
Collection<String> value = map.values();
System.out.println(value.toString());

// entrySet 사용해 key , value 데이터 확인
for(Entry<Integer, String> ent : map.entrySet()){
    System.out.println("entrySet : " + ent.getKey() + " / " + ent.getValue());			
}

=====================================================================
{1=바나나, 2=사과, 3=딸기}
[1, 2, 3]
[바나나, 사과, 딸기]
entrySet : 1 / 바나나
entrySet : 2 / 사과
entrySet : 3 / 딸기

 

 

 

문제

 

ex_ 모자 2종류, 옷 3종류, 악세서리 2종류일 경우

부위별로 한개씩만 착용할 수 있으니 모자는 X(착용x),1, 2  => 3가지 방법, 옷 => 4가지, 악세서리 3가지

3부위 중 하나만 착용해도 되니 각 부위별 가능성들을 곱해준다

( 3 * 4 * 3 = 36 ) 경우의 수는 36가지 - 1가지(모두 벗은 경우는 없으므로!) = 35개의 경우의 수

import java.util.HashMap;
import java.util.HashSet;
import java.util.Set;

class Solution {
    public int solution(String[][] clothes) {
 
 	//경우의 수를 구할때 곱해줘야하기 때문에 초기값을 1로 설정
 	int answer = 1; 
	HashMap<String, Integer> map = new HashMap<String, Integer>();
 
 	// 2차원의 배열의 경우 길이만 적으면 행의 갯수가 길이가 됨
 	for(int i = 0; i < clothes.length; i++){
    	// put을 통해 map에 데이터 입력
        // getOrDefault메소드로 clothes[i][1](Key)에 해당하는 value를 넣는데 Key가 없다면 0을 반환
    	map.put(clothes[i][1], map.getOrDefault(clothes[i][1], 0) +1);
    }
 
 	Set<String> keySet = map.keySet();
    
    for(String key : keySet){
    	answer *= map.get(key) +1;
    }
 
 	// 모두다 벗은 경우 1가지를 빼줌
 	return answer -1;
    
    }
}

 

블로그 : https://sas-study.tistory.com/215  참고

 

솔직히 아직 잘 모르겠다...ㅜ

 

 

 

 

 

 

 

 

 

댓글