https://www.acmicpc.net/problem/1497
๋ฌธ์
๊ฐํ ๋ Day Of Mourning์ ๊ธฐํ๋ฆฌ์คํธ๋ก, ๋ค๊ฐ์ค๋ ๊ณต์ฐ์ ์ค๋นํ๊ณ ์๋ค.
์ด๋ ๋ ๊ฐํ ์ ์ง์ ๋๋์ด ๋ค์ด์ ๊ธฐํ๋ฅผ ๋ชจ๋ ๋๋๋ง๊ณ ๋ง์๋ค. ๊ธฐํ๋ฅผ ์ฌ์ผ ํ๋ค.
๊ฐํ ๋ ๊ณต์ฐ ๋ ์ฐ์ฃผํ ๋ ธ๋์ ๋ชฉ๋ก์ ๋ฝ์ ๋์๋ค. ํ์ง๋ง, ํ๋์ ๊ธฐํ๋ก ๋ชจ๋ ๊ณก์ ์ฐ์ฃผํ ์๋ ์๋ค. ์ด๋ค ๊ธฐํ๋ ์ด๋ค ๊ณก์ ์ฐ์ฃผํ ๋, ์ด์ํ ์๋ฆฌ๊ฐ ๋๊ธฐ ๋๋ฌธ์ด๋ค. ํญ์ ์๋ฒฝ์ ์ถ๊ตฌํ๋ ๊ฐํ ๋ ์ด๋ฐ ์ผ์ ์ฉ๋ฉํ์ง ์๋๋ค.
์ต๋ํ ๋ง์ ๊ณก์ ์ ๋๋ก ์ฐ์ฃผํ๋ ค๊ณ ํ ๋, ํ์ํ ๊ธฐํ์ ์ต์ ๊ฐ์๋ฅผ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์๋ฅผ ๋ค์ด, GIBSON์ผ๋ก 1, 2, 3๋ฒ ๊ณก์ ์ ๋๋ก ์ฐ์ฃผํ ์ ์๊ณ , FENDER๋ก 1, 2, 5๋ฒ ๊ณก์ ์ ๋๋ก ์ฐ์ฃผํ ์ ์๊ณ , EPIPHONE์ผ๋ก 4, 5๋ฒ ๊ณก์ ์ ๋๋ก ์ฐ์ฃผํ ์ ์๊ณ , ESP๋ก 1๋ฒ๊ณก์ ์ ๋๋ก ์ฐ์ฃผํ ์ ์๋ค๋ฉด, ์ธ์ค์ด๋ EPIPHONE๊ณผ GIBSON์ ์ฌ๋ฉด ์ต์์ ๊ฐ์๋ก ๋ชจ๋ ๊ณก์ ์ฐ์ฃผํ ์ ์๋ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ ๊ธฐํ์ ๊ฐ์ N๊ณผ ๊ณก์ ๊ฐ์ M์ด ์ฃผ์ด์ง๋ค. N์ 10๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์์ฐ์์ด๊ณ , M์ 50๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์์ฐ์์ด๋ค. ๋์งธ ์ค๋ถํฐ N๊ฐ์ ์ค์ ๊ธฐํ์ ์ด๋ฆ๊ณผ ๊ธฐํ๊ฐ ์ฐ์ฃผํ ์ ์๋ ๊ณก์ ์ ๋ณด๊ฐ 1๋ฒ ๊ณก๋ถํฐ ์ฐจ๋ก๋๋ก ์ฃผ์ด์ง๋ค. Y๋ ์ฐ์ฃผํ ์ ์๋ ๊ฒ์ด๊ณ , N์ ์๋ ๊ฒ์ด๋ค. ๊ธฐํ์ ์ด๋ฆ์ ์ํ๋ฒณ ๋๋ฌธ์๋ก๋ง ์ด๋ฃจ์ด์ ธ ์๊ณ , ๊ธธ์ด๋ 2 ์ด์, 50 ์ดํ์ด๋ค. ๋ ๊ธฐํ์ ์ด๋ฆ์ด ๊ฐ์ ๊ฒฝ์ฐ๋ ์๋ค.
์ถ๋ ฅ
์ฒซ์งธ ์ค์ ํ์ํ ๊ธฐํ์ ๊ฐ์๋ฅผ ์ถ๋ ฅํ๋ค. ๋ง์ฝ ์ฐ์ฃผํ ์ ์๋ ๊ณก์ด ์์ผ๋ฉด -1์ ์ถ๋ ฅํ๋ค.
ํ์ด
์ ๋ ฅ์ ์กฐ๊ธ ๊น๋ค๋กญ๊ฒ ์ค์ ์ ๋ ฅ ๋ฐ๋ ์ฝ๋๊ฐ ์ข ๊ธด ํธ์ด๋ค
cin >> n >> m;
v.assign(n, vector<bool>(m));
for(int i=0; i<n; i++) {
string name, input;
cin >> name >> input;
for(int j=0; j<m; j++) {
v[i][j] = input[j]=='Y';
}
}
์ด์ ๊ฐ ๊ธฐํ๋ฅผ ๋๋ฉด์ ํฌํจ ์ํค๊ฑฐ๋ ํฌํจ ์ํค์ง ์๋ ๊ฒฝ์ฐ๋ฅผ ๋ค ์ดํด๋ณด๋ฉด์
์ต๋ํ ๋ง์ ๊ณก์ ์ฐ์ฃผํ ์ ์์ ๋ ๊ธฐํ์ ๊ฐฏ์๋ฅผ return ํ๋ฉด ๋๋ค.
๋ฐฑํธ๋ํน์ด๋ค.
// ํ์ด : https://whkakrkr.tistory.com
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
typedef pair<int, int> ci;
int n,m;
vector<vector<bool>>v;
vector<ci>ans; // ans{a,b} = a๊ฐ์ ๊ณก์ b๊ฐ์ ๊ธฐํ๋ก ์ฐ์ฃผํ ์ ์๋ค
int getSongNum(vector<bool>&song) {
int num = 0;
for(bool b : song) {
num += b;
}
return num;
}
void recur(int k, vector<bool>song, int guitar) {
// ๋ชจ๋ ๊ธฐํ๋ฅผ ๋ค ํ์ธ
if(k>=n){
int songNum = getSongNum(song);
ans.push_back({songNum, guitar});
return;
}
// k๋ฒ ๊ธฐํ ์ ํ ์ํจ
recur(k+1, song, guitar);
// K๋ฒ ๊ธฐํ ์ ํํจ
for(int i=0; i<m; i++) {
if(v[k][i]) {
song[i] = true;
}
}
recur(k+1, song, guitar+1);
}
bool cmp(ci a, ci b) {
if(a.first == b.first) {
return a.second < b.second;
}
return a.first > b.first;
}
int solution() {
recur(0, vector<bool>(m,false), 0);
// ๊ณก์ ์๊ฐ ํฌ๊ณ ๊ธฐํ์ ์๊ฐ ์์ ์์๋๋ก ์ ๋ ฌ
sort(ans.begin(), ans.end(), cmp);
if(ans[0].first == 0) {
// ์ฐ์ฃผํ ์ ์๋ ๊ณก์ด ์์
return -1;
}
return ans[0].second;
}
int main() {
// ์
๋ ฅ
cin >> n >> m;
v.assign(n, vector<bool>(m));
for(int i=0; i<n; i++) {
string name, input;
cin >> name >> input;
for(int j=0; j<m; j++) {
v[i][j] = input[j]=='Y';
}
}
// ํ์ด ๋ฐ ์ถ๋ ฅ
cout << solution();
return 0;
}
์ํ์ฐฉ์ค
์์ 3์ ์ฃผ์ํ์.
๋ชจ๋ ๊ณก์ ๋ค ์ฐ์ฃผํ ํ์๊ฐ ์๋ค (ใ ใ )
๋๋ถ์ ์ด์ฌํ ์ง ์ฝ๋ ๋์ง๊ณ ์๋ก ์งฌ ใ ..ใ
// ํ์ด : https://whkakrkr.tistory.com
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int n,m;
vector<vector<bool>>v;
vector<int>ans;
// ๊ณต์ฐ์ด ๊ฐ๋ฅํ๊ฐ = ๋ชจ๋ ๋
ธ๋๋ฅผ ์ฐ์ฃผํ ์ ์๋๊ฐ
bool isComplete(vector<bool>&song) {
for(bool i : song) {
if(!i) return false;
}
return true;
}
void recur(int k, vector<bool>song, int guitar) {
if(isComplete(song)) { // ๋ชจ๋ ๋
ธ๋ ์ฐ์ฃผ ๊ฐ๋ฅ
ans.push_back(guitar);
return;
}
if(k>=n){ // ๋ชจ๋ ๊ธฐํ๋ฅผ ๋ค ํ์ธ
return;
}
// k๋ฒ ๊ธฐํ ์ ํ ์ํจ
recur(k+1, song, guitar);
// K๋ฒ ๊ธฐํ ์ ํํจ
for(int i=0; i<m; i++) {
if(v[k][i]) {
song[i] = true;
}
}
recur(k+1, song, guitar+1);
}
int solution() {
recur(0, vector<bool>(m,false), 0);
if(ans.size() == 0) {
return -1;
}
sort(ans.begin(), ans.end());
return ans[0];
}
int main() {
// ์
๋ ฅ
cin >> n >> m;
v.assign(n, vector<bool>(m));
for(int i=0; i<n; i++) {
string name, input;
cin >> name >> input;
for(int j=0; j<m; j++) {
v[i][j] = input[j]=='Y';
}
}
// ํ์ด ๋ฐ ์ถ๋ ฅ
cout << solution();
return 0;
}
'๐๏ธ ICPC Sinchon > Backtracking' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ][C++] ๋ฐฑ์ค 23057๋ฒ: ๋์ ์ซ์์ (4) | 2024.10.18 |
---|---|
[BOJ][C++] ๋ฐฑ์ค 9997๋ฒ: ํฐํธ (0) | 2024.10.16 |
[BOJ][C++] ๋ฐฑ์ค 1759๋ฒ: ์ํธ ๋ง๋ค๊ธฐ (0) | 2023.11.22 |
[BOJ][C++] ๋ฐฑ์ค 14888๋ฒ: ์ฐ์ฐ์ ๋ผ์๋ฃ๊ธฐ (0) | 2023.07.06 |
[BOJ][C++] ๋ฐฑ์ค 15811๋ฒ: ๋ณต๋ฉด์ฐ?! (0) | 2023.01.22 |