๐ ๋ฌธ์ ๋งํฌ
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์ ์ถ๋ ฅํ๋ค.
๐ ๋ฌธ์ ์ ๋ณด
- ๐ฅ ๋ฌธ์ ๋ ๋ฒจ : ์ค๋ฒ 1
- ๐ ๋ฌธ์ ์ ํ : ์ํ, ๋ธ๋ฃจํธํฌ์ค ์๊ณ ๋ฆฌ์ฆ, ์กฐํฉ๋ก , ๋นํธ๋ง์คํน, ๋ฐฑํธ๋ํน
- ๐ฌ ํ์ด ์ธ์ด : JAVA
๐ค ๋ฌธ์ ํ์ด
์ฒ์ ๋ฌธ์ ๋ฅผ ์ฝ๊ณ , ์ฐ์ฃผํ ์ ์๋ ๊ณก์ booleanํ ๋ฐฐ์ด์ ๋ง๋ค์ด ์ฒดํฌํ๋ฉด์
N๊ฐ์ ๊ธฐํ๋ก ๋ง๋ค ์ ์๋ ์กฐํฉ์ ๋ชจ๋ ๋ง๋ค์ด ์ฐ์ฃผํ ์ ์๋ ๊ณก์ ์ฒดํฌํ๋ ๋ฐฉ์์ผ๋ก ํด๊ฒฐํ๋ ค ํ๋ค.
์ ๋ ฅ์ ๋ฐ๋ ๋์ค ๋นํธ๋ง์คํน์ด ์๊ฐ๋ฌ๊ณ , ๊ณก์ ๊ฐ์๊ฐ ์ต๋ 50๊ฐ์ด๋ฏ๋ก Longํ ๋นํธ๋ง์คํน์ ์ฌ์ฉํ๋ฉด ๋ชจ๋ ๊ณก์ ํํํ ์ ์๋ค๊ณ ์๊ฐํ๋ค.
์๋ฅผ ๋ค์ด, ์ฐ์ฃผ๊ฐ ๊ฐ๋ฅํ ๊ณก์ 1, ๋ถ๊ฐ๋ฅํ ๊ณก์ 0์ผ๋ก ํํํ๋ค๊ณ ํด๋ณด์
YYYNN : 11100
NNNYY : 00011
์์ ์ฐ์ฃผ ๊ฐ๋ฅํ ๋ชฉ๋ก์ ๋ํด 2๊ฐ์ ๊ธฐํ๋ฅผ ์ฌ์ฉํ๋ค๋ฉด, OR ์ฐ์ฐ์ ์ฌ์ฉํด์ ์๋์ ๊ฐ์ด ํํํ ์ ์๋ค.
YYYNN (11100) | NNNYY (00011) = YYYYY (11111)
์ฆ, ๋ชจ๋ ๊ณก์ ์ฐ์ฃผํ ์ ์๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
๊ธฐํ์ ์ฐ์ฃผ ๊ฐ๋ฅ ๋ชฉ๋ก์ ๋นํธ ํํ๋ก ํํํ ํ,
- ํ์ฌ ๊ฐ๋ฆฌํค๋ ๊ธฐํ๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ
- OR ์ฐ์ฐ์ ํตํด ์ฐ์ฃผ ๊ฐ๋ฅํ ๊ณก์ ์ ๋ฐ์ดํธํ๋ค.
- bit | guitarBit[depth]
- ํ์ฌ ๊ฐ๋ฆฌํค์ง ๊ธฐํ๋ฅผ ์ฌ์ฉํ์ง ์์ ๊ฒฝ์ฐ
- ๋ค์ ๊ธฐํ๋ฅผ ํ์ํ๋ค.
๋ก ๋๋์ด ๋ฐฑํธ๋ํน์ ์งํํ๋ค.
์์ ํ์์ ์งํํ ๋,
๋ชจ๋ ๊ธฐํ๋ฅผ ํ์ธํ๊ฑฐ๋, ๋ชจ๋ ๊ณก์ ์น ์ ์์ง๋ง ์ต์๊ฐ์ด ์๋ ๊ฒฝ์ฐ ๋ ์ด์ ํ์์ ์งํํด๋ ์๋ฏธ๊ฐ ์์ผ๋ฏ๋ก ์ข ๋ฃํ๋ค.
๋ํ, ๋ฌธ์ ์์ ์ค๋ณต๋๋ ๊ธฐํ๋ ์๋ค๊ณ ํ๊ธฐ ๋๋ฌธ์ ์ธ๋ฑ์ค๋ง์ผ๋ก ๊ณ์ฐ์ด ๊ฐ๋ฅํ๋ค๊ณ ์๊ฐํ์ฌ
๊ธฐํ์ ์ด๋ฆ์ ๋ฐ๋ก ์ ์ฅํ์ง ์์๋ค.
โ ์ต์ข ์ฝ๋
๋ฉ๋ชจ๋ฆฌ : 11600KB
์๊ฐ : 68ms
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
static int n, m;
static long[] guitarBit; // ๊ฐ ๊ธฐํ๊ฐ ์ฐ์ฃผํ ์ ์๋ ๊ณก์ ์ ๋ณด๋ฅผ ๋นํธ๋ง์คํน์ผ๋ก ํํ
static int max = 0; // ์ฐ์ฃผ ๊ฐ๋ฅํ ์ต๋ ๊ณก ๊ฐ์
static int ans = 987654321; // ํ์ํ ๊ธฐํ์ ์ต์ ๊ฐ์
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
n = Integer.parseInt(st.nextToken()); // ๊ธฐํ ๊ฐ์
m = Integer.parseInt(st.nextToken()); // ๊ณก ๊ฐ์
guitarBit = new long[n];
for (int i = 0; i < n; i++) {
st = new StringTokenizer(br.readLine());
st.nextToken(); // ๊ธฐํ ์ด๋ฆ
char[] guitarArr = st.nextToken().toCharArray();
for (int j = 0; j < m; j++) {
if (guitarArr[j] == 'Y') { // ์ฐ์ฃผ ๊ฐ๋ฅ 1, ๋ถ๊ฐ๋ฅ 0
guitarBit[i] |= (1L << j);
}
}
}
// ํ์ธํ ๊ธฐํ ๊ฐ์, ํ์ฌ ์ฐ์ฃผ ๊ฐ๋ฅํ ๊ณก ๊ฐ์, ์ฌ์ฉํ ๊ธฐํ ๊ฐ์
back(0, 0L, 0);
StringBuilder sb = new StringBuilder();
if (ans == 0) { // ์ฐ์ฃผํ ์ ์๋ ๊ณก X
sb.append(-1).append("\n");
} else sb.append(ans).append("\n");
System.out.println(sb.toString());
}
private static void back(int depth, long bit, int usingGuitar) {
int bitCnt = Long.bitCount(bit); // ํ์ฌ ์ฐ์ฃผ ๊ฐ๋ฅํ ๊ณก ๊ฐ์
// ํ์ฌ ์ฐ์ฃผํ ์ ์๋ ๊ณก์ ๊ฐ์ง๋ง ์ฌ์ฉํ ๊ธฐํ ๊ฐ์๊ฐ ์ ์ ๋
if (bitCnt == max && usingGuitar < ans) {
// ์ต์ ๊ธฐํ ๊ฐ์ ๊ฐฑ์
ans = usingGuitar;
}
// ์ต๋ ๊ณก ๊ฐ์ ๋ณด๋ค ์ฐ์ฃผํ ์ ์๋ ๊ณก์ด ๋ ๋ง์ ๋
if (max < bitCnt) {
// ์ฌ์ฉํ ๊ธฐํ ๊ฐ์, ์ฐ์ฃผ ๊ฐ๋ฅํ ์ต๋ ๊ณก ๊ฐ์ ๊ฐฑ์
ans = usingGuitar;
max = bitCnt;
}
// ๋ชจ๋ ๊ณก์ ์น ์ ์์ง๋ง ์ต์๊ฐ์ด ์๋ ๊ฒฝ์ฐ, ๋ชจ๋ ๊ธฐํ๋ฅผ ํ์ธํ ๊ฒฝ์ฐ
if (bitCnt == m || depth == n) {
return;
}
// ํ์ฌ ๊ธฐํ ์ฌ์ฉ
back(depth+1, bit | guitarBit[depth], usingGuitar+1);
// ์ฌ์ฉ X
back(depth+1, bit, usingGuitar);
}
}
ํด๊ฒฐํ๋๋ฐ ๊ฝค ์๊ฐ์ด ๊ฑธ๋ฆฐ ๋ฌธ์ ์์ง๋ง,
์ค๋๋ง์ ๋ฐฑํธ๋ํน ๋ฌธ์ ๋ฅผ ํ๋ฉด์ ๋นํธ๋ง์คํน๊น์ง ๋ค์ ๊ณต๋ถํ ์ ์๋ ๋ฌธ์ ์๋ค ! ๐ฅ
๋ถ๋งํฌ ํด๋๋ค ๋ค์ ํ์ด๋ด์ผ์ง ๐
'Algorithm > BOJ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Boj_14431] ์์๋ง์ (0) | 2024.12.26 |
---|---|
[Boj_11003] ์ต์๊ฐ ์ฐพ๊ธฐ (0) | 2024.12.17 |
[Boj_1584] ๊ฒ์ (0) | 2024.11.29 |
[Boj_20160] ์ผ์ฟ ๋ฅดํธ ์์ค๋ง ์ผ์ฟ ๋ฅดํธ ์ฃผ์ธ์ (0) | 2024.11.21 |
[Boj_1464] ๋ค์ง๊ธฐ 3 (0) | 2024.07.19 |