Kiki Devlog

[프로그래머스][Lv 2] 위장 (stl map, 포인터의 화살표 연산자) 본문

Coding Test/프로그래머스

[프로그래머스][Lv 2] 위장 (stl map, 포인터의 화살표 연산자)

kimkiki 2022. 6. 9. 23:50
728x90

map 쓰는 법을 까먹어서 다시 풀어본 문제. 풀면서 겸사겸사 포인터 화살표 연산자도 정리해 둠! 미묘하게 이전에 짠 코드보다 발전했음을 알 수 있다(●'◡'●)

 

문제: 코딩테스트 연습 - 위장 | 프로그래머스 (programmers.co.kr)

 

코딩테스트 연습 - 위장

 

programmers.co.kr

 

내 코드

#include <string>
#include <vector>
#include <map>

using namespace std;

int solution(vector<vector<string>> clothes) {
    int answer = 0;
    map<string,vector<string>> m;
    map<string,vector<string>> ::iterator iter;
    
    for(int i = 0;i<clothes.size();i++){
        m[clothes[i][1]].push_back(clothes[i][0]);
    }
    
    int ans = 1;
    for(iter  = m.begin();iter !=m.end();iter++){
        ans =  ans * (iter->second.size()+1);
        // 위와 같은 코드. ans =  ans * ((*iter).second.size()+1);
    }
    answer = ans-1;//아무것도 안입는 상황 제외
    return answer;
}

 

이전 내 코드 (언제 푼지 모르는데 1년은 넘음) 

#include <string>
#include <vector>
#include <map>

using namespace std;

int solution(vector<vector<string>> clothes) {
    int answer = 1;
    map<string,int> m;
    map<string,int> :: iterator iter;
    for(int i = 0; i<clothes.size();i++){
        iter = m.find(clothes[i][1]);
        if(iter!=m.end()){
            (iter->second)++;
        }
        else{
            m.insert(pair<string,int>(clothes[i][1],1));
        }
    }
     for(iter = m.begin();iter != m.end(); iter ++)
        answer*=iter->second + 1; // 안입는 경우까지 1더해서 모두를 곱해줌
    --answer; //모두 안입은 경우 하나 빼줌

    return answer;
}
Comments