728x90
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 내용, 조건, 예시는 프로그래머스 사이트 참조
의상
이번 문제는 경우의 수를 계산하면 비교적 쉽게 해결할 수 있습니다.
[["yellow_hat", "headgear"], ["blue_sunglasses", "eyewear"], ["green_turban", "headgear"]]
예시를 표로 정리하면
headgear | eyewear |
yellow_hat | blue_sunglasses |
green_turban |
headgear 2개, eyewear 1개가 있습니다. 두 가지로 입는 경우 수를 구하면 2x1 = 2를 구할 수 있습니다.
하지만 의상을 입지 않는다는 선택지도 존재하기 때문에 의상 없음 항목을 추가해서 다시 표를 그려봅니다.
headgear | eyewear |
yellow_hat | blue_sunglasses |
green_turban | 입지 않음 |
입지 않음 |
headgear 3개, eyewear 2개의 경우 수를 구하면 3x2 = 6를 구할 수 있습니다.
여기서 '코니는 하루에 최소 한 개의 의상은 입습니다.' 조건에 따라서 전부 입지 않는 경우 수 1건을 제외해야 합니다.
그러므로 6 - 1 = 5로 값을 구할 수 있습니다.
알고리즘
- 옷의 종류와 개수를 저장하기 위해 2차원 벡터로 저장되어 있는 값을 map에 저장
- (key : 종류, value : 개수; 정렬이 필요 없기 때문에 unordered_map 활용; map을 써도 무방)
- (의상 입지 않음을 고려해서 value에 추가로 +1을 더해줌)
- 종류의 개수를 모두 곱해준다 (경우의 수)
- 출력된 값에 -1을 해준다 (모두 입지 않은 경우 수)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | #include <string> #include <vector> #include <algorithm> #include <unordered_map> using namespace std; int solution(vector<vector<string>> clothes) { int answer = 1; unordered_map<string, int> un_map; for(auto item : clothes) { un_map[item[1]] += 1; } vector<int> v; for(auto m : un_map) { answer *= (m.second + 1); } answer--; return answer; } | cs |
728x90
반응형
'프로그래밍 > 프로그래머스' 카테고리의 다른 글
Lv2_[멀리뛰기, C++] 풀이 및 알고리즘 정리 - 프로그래머스 (0) | 2023.06.02 |
---|---|
Lv2_[전화번호 목록, C++] 풀이 및 알고리즘 정리 - 프로그래머스 (0) | 2023.05.28 |
Lv2_[[1차] 캐시, C++] 풀이 및 알고리즘 정리 - 프로그래머스 (0) | 2023.05.23 |
Lv2_[다음 큰 숫자, C++] 풀이 및 알고리즘 정리 - 프로그래머스 (0) | 2023.03.30 |
Lv2_[올바른 괄호, C++] 풀이 및 알고리즘 정리 - 프로그래머스 (0) | 2023.03.29 |
댓글