baekjoon, programmers

programmers 의상

leon-mcd 2024. 7. 19. 14:16

programmers

level2 의상

문제 설명

프로그래머스 링크
위 이미지를 클릭하면 해당 문제로 이동합니다.

#include <string>
#include <vector>
#include <unordered_map>

using namespace std;

int solution(vector<vector<string>> clothes) {
    int answer = 1;
    unordered_map<string, int> clo_ctg;

    for(vector<string> a : clothes){
        if(clo_ctg.find(a[1])==clo_ctg.end()){
            clo_ctg.insert({a[1], 1});
        }
        else clo_ctg[a[1]]++;
    }

    for(auto i = clo_ctg.begin(); i!=clo_ctg.end(); i++) answer*=(++(i->second));//2벌인 경우 안입기, 1번 입기, 2번 입기 로 3가지 경우로 다뤄주기 위해 1을 더해서 곱해줌
    answer--;//아무것도 입지 않은 경우
    return answer;
}

해결 과정

문제가 해시 분류에 들어가 있는 문제라는 것을 알고 풀기 시작했다. 문제를 보고 나서는 이 문제가 왜 해시로 분류되는 지 의문이 들었다. 옷의 종류가 정말 많을 수 있다고 문제에서 주어졌다면 해시를 사용할 의미가 있었을 것 같다. 그럼에도 불구하고 unordered_map가 string을 key로 사용하는 데 유용하고 탐색에도 유리해서 사용했다. map을 선언하고 이미 옷의 개수만큼 loop를 돌면서 map에 같은 key가 있다면 증가연산자 없다면 입력해주면서 옷의 종류마다 분류해줬다. 이후에 값들을 곱해주어서 착용 선택지의 개수를 계산하였다. 같은 종류의 옷이 2개 있다면 1번 옷 입기, 2번 옷 입기, 안입기로 3가지 경우가 존재함으로 곱셈할 때 증가연산자를 이용하여 계산해주었다. 이후에 감소 연산자를 이용하여 결과에 반영된 옷을 아무것도 입지않은 경우를 제외시켰다.

'baekjoon, programmers' 카테고리의 다른 글

programmers H-Index  (0) 2024.07.21
programmers 행렬의 곱셈  (0) 2024.07.19
programmers 귤 고르기  (0) 2024.07.16