본문 바로가기

PS/프로그래머스

[프로그래머스 LV 2] 위장 C++

728x90

programmers.co.kr/learn/courses/30/lessons/42578

 

코딩테스트 연습 - 위장

 

programmers.co.kr

처음에 어떻게 풀지 고민하다

그 고등학교 확통시간에 서로다른 N가지 종류의 옷을 입는 경우의 수 구하는 문제..

 

상의가 3벌, 하의가 2벌, 모자가 1벌 있을때 모든 옷의 조합을 구하는 경우의 수는

 

(3+1)(상의3벌 + 안입는경우의수1) * (2+1) * (1+1) -1 (-1은 아예 옷을 안 입는 경우의 수 1개를 빼줌)

 

"4 * 3 * 2 -1" = 23가지 경우

 

이걸 코드로 구현했다.

 

아래 코드를 보면 주석처리한 식이 있는데 맵을 저렇게 순회할 수 있다는걸 알게됐다. 다른분의 코드인데 좋아서 주석으로 넣어놨음! 내코드는 맵을 순회하는 코드가 좀 지저분하다.

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <string>
#include <vector>
#include <unordered_map>
using namespace std;
 
int solution(vector<vector<string>> clothes) {
    int answer = 1;
    unordered_map<stringint > map;
    //옷 종류별로 몇 벌 있나 체크
    for (int i = 0; i < clothes.size(); i++)
        map[clothes[i][1]] ++;
 
    for (int i = 0; i < clothes.size(); i++) {
        answer *= (map[clothes[i][1]]+1);
        map[clothes[i][1]] = 0;
    }
    /*for(auto it = map.begin(); it != map.end(); it++)
        answer *= (it->second+1);
        다른 분의 코드인데 맵을 순회하는 코드가 너무 좋아서 첨부했어요*/
    return answer-1;
}
cs

 

728x90