ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • HashMap 예제 #2
    Algorithm/Hash 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
Designed by Tistory.