[プログラマー/C++]偽装


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


問題を解く


それぞれの服装は個数を利用して組み合わせなければならない.a,b,cの種類の服装が3,2,1の順にある場合
各衣類の着用方法は(3+1)(2+1)(1+1)である.プラス1の理由は着なくてもいいから!
したがって,各方法を乗算すると,組合せの個数が得られる.
ここでは少なくとも1枚の服を着なければならないので、何も着なければ、1枚外せばいいです.
現在の配列は[[이름, 종류], [이름,종류], [이름,종류]]であるため、それぞれのタイプがkeyの地図のvalue値を1つずつ加算して算出する.
その後地図を巡り、各(value+1)を順番に乗じて、その後1つ外して終わりました!

コード#コード#

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

int solution(vector<vector<string>> clothes) {
    int answer = 1;
    
    map<string,int> m; //의상 종류, 개수
    

    //의상 종류마다 개수 저장.
    for(int i=0;i<clothes.size();i++){
        if(m.count(clothes[i][1])==0) m[clothes[i][1]]=1; //key값이 없을 경우
        else m[clothes[i][1]]+=1; 
    }
    
    // (의상a 개수 +1)*(의상b 개수 +1)*... -1 (모두 입지 않은 경우)
    for(auto it=m.begin();it!=m.end();it++){
        answer*=it->second+1;
    }
    
    return answer-1;
}

新しい認識の事物


1)

 //의상 종류마다 개수 저장
 for(int i=0;i<clothes.size();i++){
        if(m.count(clothes[i][1])==0) m[clothes[i][1]]=1; //key값이 없을 경우
        else m[clothes[i][1]]+=1; 
 }
これでkey値がない場合は別と思いますが、直接m[clothes[i][1]]+=1でもいいようです.
そしてautoを使ってもっと簡単に表現します
for(auto item : clothes) //clothes의 각 행!
   m[item[1]]++; //item[1] 은 해당 행의 1열을 의미함, 즉 옷 종류
このハーモニーでもいい!

2)2 Dベクトル


2 Dベクトルを使ったことがないので混同しました.

3) map


リファレンス
  • を挿入し、
  • を削除します.
    map[key]=value;
    
    map.insert(make_pair(key,value));
    
    map.erase(key); : 주어진 key와 그 key의 value쌍을 삭제한다.
  • クエリー
  • map[key]; → value값 출력
  • は、
  • が存在するかどうか
    map.count(key);
    指定したキーの要素数を返します.ただしkeyは一意の値であるためcount関数は0と1しか返されません.
  • を変更
    map[key]+=a;
    
    map[key]=value;
    map[key]はvalueであり、通常は変数を変更するときのように処理するだけでよい.
  • 巡回訪問
  • for(iter = m.begin(); iter != m.end() ; iter++){
            cout << "[" << **iter->first** << ", " << **iter->second** << "]" << " ";
        }    
    key: iter->fisrtvalue: iter->second