https://school.programmers.co.kr/learn/courses/30/lessons/42578
1. 문제해결
ex) 모자 : 3개
상의 : 2개인경우
모자 : 안입음, 1개입, 2개입, 3개입
상의 : 안입, 1개입, 2개입
모든경우의수 == 4*3==12 에서
안입는경우 -1을 하면된다.
2. 코드
#include <bits/stdc++.h>
using namespace std;
int ret;
map<string, int> m1;
map<int, int> m2;
int solution(vector<vector<string>> clothes) {
for(auto v : clothes){
m1[v[1]]++;
}
ret=1;
for(auto item : m1){
ret*=item.second+1;
}
ret--;
return ret;
}
3. 백트래킹 코드(1번 테스트케이스 시간초과)
모든 옷 한개씩 있는경우만 예외처리 해주면 뚫린다고 한다...
#include <bits/stdc++.h>
using namespace std;
int ret;
map<string, int> m1;
map<int, int> m2;
//현재 k번째 옷을 입을것임.
void go(int k, int cnt){
//cout<<"go:("<<k<<","<<cnt<<") "<<m2[k]<<"\n";
if(k>=m1.size()){
//cout<<cnt<<"\n";
if(cnt>0){
ret++;
}
return;
}
//go(k+1,cnt+1);
//i : k번째 옷 종류에서 입을 옷의 갯수
for(int i=0;i<=m2[k];++i){
go(k+1,cnt+i);
}
}
int solution(vector<vector<string>> clothes) {
for(auto v : clothes){
m1[v[1]]++;
}
int i=0;
for(auto item : m1){
//cout<<item.first<<" "<<item.second<<"\n";
m2[i]=item.second;
++i;
}
// for(auto item : m2){
// cout<<item.first<<" "<<item.second<<"\n";
// }
go(0,0);
return ret;
}
'Algorithm > back_tracking' 카테고리의 다른 글
100C2 X 98 C 2 조합 구현 (0) | 2024.06.29 |
---|---|
프로그래머스 상담원 인원 c++ // 우선순위큐, 중복조합(백트래킹) (0) | 2024.06.26 |
백준 16987 계란으로 계란치기 c++ // 백트래킹, 원상복구, 다음깊이로 넘어가는 방법 (0) | 2023.10.05 |
백준 1941 소문난 칠공주 c++ // 1차원배열을 2차원좌표로 매핑하는법 , 백트래킹, dfs (0) | 2023.10.03 |
백준 6603 로또 c++ // kC6 구현하기 (0) | 2023.10.03 |