일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 알고리즘
- 락
- 다이나믹 프로그래밍
- 디자인패턴
- 렌더링 파이프라인
- OS
- 다이나믹프로그래밍
- codility
- 멀티프로세서
- Direct12
- directx
- 자료구조
- 컨디션 변수
- 파일시스템 구현
- 그리디 알고리즘
- 멀티쓰레드
- 영속성
- 그리디알고리즘
- DirectX 12
- I/O장치
- 병행성 관련 오류
- 쓰레드
- 백준
- 스케줄링
- 프로그래머스
- 병행성
- 타입 객체
- 동적계획법
- DirectX12
- 운영체제
Archives
- Today
- Total
기록공간
위장 (프로그래머스) 본문
반응형
옷을 입는 경우의 수를 도출하는데에 애를 많이 먹은 문제였다;;
우선 해시를 이용하여 해당 종류의 맞는 옷의 갯수를 컨테이너에 기록한다. (key값은 옷의 종류 이름, value값은 그 종류의 옷 개수) 옷의 이름은 이 문제를 해결하는데에 전혀 필요가 없다.
옷의 종류별 갯수를 알았으니 이제 이 스파이가 위장할 옷을 입는 경우의 수를 구할 차례이다. 예를들어 얼굴 종류의 옷 5개와 하의 종류의 옷 4개가 있다고 하자. 만약 이 옷을 두가지 모두 입어야 한다면 5 * 4 = 20가지 조합이 나온다. 하지만 옷을 안입는 경우도 있으므로 안입은 경우를 추가해줘야 한다. 그래서 조합 수 는 (5 + 1) * (4 + 1) = 30가지이다.
하지만 30은 정답이 아니다! 위 조건에서 "스파이는 하루에 최소 한 개의 의상은 입습니다." 부분을 숙지해야 한다. 이 말인 즉슨, 아무것도 안입는 경우는 빼야한다는 것이다. 그래서 최종적인 경우의 수는 30 - 1 = 29가지이다.
코드는 다음과 같다.
#include <string>
#include <vector>
#include <unordered_map>
using namespace std;
int solution(vector<vector<string>> clothes)
{
int answer = 1;
unordered_map<string, int> d;
for(const auto iter : clothes) d[iter[1]]++;
for(const auto iter : d) answer *= (iter.second + 1);
return answer - 1;
}
반응형
'Algorithm > 문제' 카테고리의 다른 글
크레인 인형뽑기 게임 (프로그래머스) (0) | 2020.05.16 |
---|---|
베스트앨범 (프로그래머스) (0) | 2020.05.11 |
전화번호 목록 (프로그래머스) (0) | 2020.05.11 |
완주하지 못한 선수(프로그래머스) (0) | 2020.05.08 |
가장 큰 수(프로그래머스) (0) | 2020.05.05 |
Comments