https://school.programmers.co.kr/learn/courses/30/lessons/42578
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
코니는 매일 다른 옷을 조합하여 입는 것을 좋아합니다. 주어진 옷의 종류별로 최대 한 가지씩만 착용할 수 있으며, 하루에 최소 한 개의 의상은 입어야 합니다. 각 의상 조합의 경우의 수를 계산하는 문제입니다.
얼굴 | 동그란 안경, 검정 선글라스 |
상의 | 파란색 티셔츠 |
하의 | 청바지 |
겉옷 | 긴 코트 |
예를 들어, 코니가 동그란 안경, 긴 코트, 파란색 티셔츠를 입었다면 다음 날에는 청바지를 추가하거나, 검정 선글라스를 착용하는 등으로 조합을 달리해야 합니다. (이때, 코니는 하루에 최소 한 개의 의상은 입습니다.)
풀이 방법
이 문제는 hashmap 자료구조를 사용하여 풀 수 있습니다. hashmap은 <key, value> 형식으로 데이터를 저장하며, key값이 중복되지 않도록 보장됩니다. 또한, key를 검색하거나 값을 업데이트할 때 평균적으로 O(1)의 시간복잡도를 가지므로 매우 효율적입니다.
- 의상 종류별 개수 세기
hashmap을 이용해 각 의상 종류별로 옷의 개수를 카운트합니다.- 예: key = "얼굴", value = 2 (동그란 안경, 검정 선글라스)
- 조합 수 계산
각 의상 종류별로 옷을 선택하거나, 선택하지 않을 경우까지 포함해 (옷 개수 + 1)을 곱해줍니다.- 예: 얼굴(2개)은 (2+1), 상의(1개)는 (1+1).
- 아무것도 입지 않는 경우 제외
모든 경우의 수에서 아무것도 입지 않는 경우를 제외하기 위해 최종적으로 answer - 1을 반환합니다.
풀이 코드
#include <string>
#include <vector>
#include <unordered_map>
using namespace std;
unordered_map<string,int> map;
int solution(vector<vector<string>> clothes) {
int answer = 1;
for(int i=0; i<clothes.size(); i++) map[clothes[i][1]]++;
for(auto& iter : map) answer*=(iter.second+1);
return answer-1;
}
'Algorithm > Programmers' 카테고리의 다른 글
[프로그래머스] Lv.1 신고 결과 받기 c++ (1) | 2025.01.20 |
---|---|
[프로그래머스] Lv.1 달리기 경주 c++ (0) | 2025.01.20 |
[프로그래머스] Lv.2 가장 큰 수 c++ (0) | 2025.01.19 |
[프로그래머스] Lv.2 프로세스 c++ (0) | 2025.01.18 |
[프로그래머스] Lv.1 숫자 문자열과 영단어 c++ (0) | 2025.01.17 |