본문 바로가기
ALGORITHM/C++ - 프로그래머스

[프로그래머스] 의상

by DDongYeop 2023. 11. 22.
728x90

문제

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

 

프로그래머스

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

programmers.co.kr

 

 

문제 분석

입을 수 있는 옷의 종류 얼굴, 상의, 하의, 겉옷 4가지가 있다. 

 

같은 종류의 옷은 같이 입을 수 없지만 다른 종류의 옷, 예시를 들자면 얼굴 얼굴 조합은 안되지만, 얼굴 상의 조합은 되는 것이다. 

 

이렇게 옷의 조합이 몇개가 나오는지 계산하는 문제이다. 

 

 

알고리즘 설계

우선 unordered_map, key는 string, value는 int로 가지는 um을 선언한다. 

또 int를 가지는 vector을 하나 선언하고, 정답으로 반환할 int형 변수 answer을 선언하고 1로 초기화한다. 

 

우선 clothes를 범위기반 for을 돌리고 그값의 1번 인덱스의 있는 옷의 종류를 가지고 um에서 1 더해준다. 

 

이후 um을 범위기반 for을 돌려 p을 얻고, p의 두번째 값에 1을 더한 값을 answer에 더한다. 이후 for문이 끝나고 answer에 1을 뺀 값을 반환하면 된다.

 

 

유의점

경우의수를 잘 생각하여 작성하여야한다. 

 

 

코드

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

using namespace std;

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

    for (vector<string> vec : clothes)
        um[vec[1]]++;

    for (auto p : um)
        answer *= p.second + 1;

    return answer - 1;
}
728x90

댓글