본문 바로가기
OLD_알고리즘/Programmers - 알고리즘

Programmers - 해시 ] Lv.2 위장

by 달승 2021. 6. 2.

#해시 #map

 

코딩테스트 연습 - 위장

 

programmers.co.kr

 

문제풀이

  • 스파이는 하루에 최소 한 개의 의상은 입습니다.

위의 조건을 만족하는 경우의 수를 계산해보자

 

만약 상의(a, b, c) 3가지, 얼굴(nn, mm) 2가지가 있다. 이 때 상의는 A, 얼굴은 B라고하자.

경우의 수는

1) a - X (상의 a와 얼굴은 아무것도 안 쓰는 경우)

2) b - X

3) c - X

4) nn - X

5) mm - X

6) a - nn

7) b - nn

8) c - nn

9) a - mm

10) b - mm

11) c - mm

12) X - X

 

총 12가지의 경우가 있다. 하지만 하루에 최소 한 개의 의상은 입으므로 12번인 둘 다 아무것도 입지 않는 경우를 제외해야 한다.

 

따라서 구현 식은 ( (A + 1) * (B + 1) ) - 1

 

 

🌱 정답코드

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

#include <string>
#include <vector>
#include <map>
using namespace std;

map<string, int> myClothes; // 옷 종류(key), 옷 종류 count

int result = 1;

int solution(vector<vector<string>> clothes) {
    int answer = 0;
    
    // 옷 종류마다 count
    for(int i = 0; i < clothes.size(); i++){
        myClothes[clothes[i][1]]++;
    }
    
    for(auto it = myClothes.begin(); it != myClothes.end(); it++){
        result *= it -> second + 1;
    }
    
    answer = result - 1;
    
    return answer;
}

댓글