Algorithm/Hash

HashMap 예제 #2

Hyeon Lee 2022. 1. 10. 11:01
728x90

프로그래머스 해시 파트 level 2 첫 번째 문제에 이어 두 번째 문제 위장문제를 도전해 보았다.

문제는 이러하다. 뭔가 문제에서 부터 Map을 쓰면 편할 것 같은 느낌이 확 풍겨온다. 하지만 막상 문제를 읽으면 서로 다른 옷의 조합의 수를 return 하란다 ㅋㅋㅋ

여튼 그럼 그냥 종류를 key로, 개수를 value로 하면 대놓고 Map으로 풀 수 있을것 같다.

 

제한 사항들과 함께 알고리즘을 생각해 보자.

1. clothes 배열을 보면 의상의 종류가 인덱스 [1] 부터 나열되고 있으므로, clothes[i][1] 인덱스를 사용해서 풀 수 있을 것 같다.

2. 같은 이름의 의상이 존재하지 않으므로, set이나 Map을 쓰면 될 듯하다.

3. clothes 원소가 문자열이므로, 제네릭<>안에 key의 타입은 String이다.

4. 하루에 최소 한개의 의상은 입으므로, 하나도 안 입는 경우는 제외해 주어야 한다.

5. 만약 상의 2벌, 하의 3벌이 있다면 총 2*3 = 6가지의 경우의 수가 나오는데, 6번째 제한사항 때문에 답이 5가지의 경우의 수가 되는 것이다.

 

이런 사항들을 고려해서 문제를 풀어보자.

 

프로그래머스 해시의 레벨1 완주하지 못한 선수에서 사용했던 getOrDefault(~~, ~~) 메소드를 사용하여 나타내었는데, 일단 map안에 value 값에 clothes[i][1]이 없으면 0을 넣어주고, 있으면 clothes[i][1]을 넣어주고 계속 개수를 +1 해준다.

 

**getOrDefault(a,index) : a가 없다면, index를 넣어주고 있으면, a를 넣어준다.

 

**keySet() : 모든 key 값이 set객체로 반환됨.

 

Map에서는 순서가 없기 때문에 iterator를 사용하여 순회시켜 주면서, map.get(key)를 통해서 value값을 불러왔다. 그리고 +1씩 해주면서 answer에 곱해서 넣어줌.

 

마지막으로 아무것도 입지 않는 경우 1을 빼주면 끝.

 

생각은 간단했는데, 막상 문제를 푸니까 시간이 좀 걸렸다. getOrDefault도 프로그래머스 레벨1 문제를 푼지 제법 시간이 흘러서 딱 떠오르지도 않았고, iterator 내부에서 key도 그냥 Integer로 했다가 오류지옥에 빠졌었... ㅠㅠㅠ

 

 

뭐 그래도 수확은 있었으니까 다행이다 ㅎㅎ

728x90