-
HashMap 예제 #2Algorithm/Hash 2022. 1. 10. 11:01728x90
프로그래머스 해시 파트 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'Algorithm > Hash' 카테고리의 다른 글
프로그래머스 고득점 kit(유형정리) - 완주하지 못한 선수 (0) 2023.01.23 프로그래머스 고득점 kit(유형정리) - 폰켓몬 (0) 2023.01.23 Map 개념 및 예제 (0) 2022.01.05 HashSet 예제 #2 (0) 2021.12.29 HashSet 개념 및 예제#1 (0) 2021.12.29