https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5V1SYKAaUDFAWu
SW Expert Academy
SW ํ๋ก๊ทธ๋๋ฐ ์ญ๋ ๊ฐํ์ ๋์์ด ๋๋ ๋ค์ํ ํ์ต ์ปจํ ์ธ ๋ฅผ ํ์ธํ์ธ์!
swexpertacademy.com
1. ๋ฌธ์ ์์ฝ
๋ณดํธ ํ๋ฆ์ ๋๊ปD, ๊ฐ๋กW, ํฉ๊ฒฉ๊ธฐ์คK์ ๋ณดํธ ํ๋ฆ์ ์ ๋ ฅ๋ฐ๋๋ค.
๊ฐ ์ด๋ง๋ค ๋์ผํ ํน์ฑ(A๋๋ B)์ด K๊ฐ ์ด์ ์ฐ์๋ ๊ฒฝ์ฐ ์กฐ๊ฑด์ ๋ง์กฑํ๋ฉฐ,
๊ฐ ํ๋ง๋ค ๋ชจ๋ ๊ฐ์ ํน์ฑ์ผ๋ก ๋ฐ๊พธ๋ '์ฝํ ํฌ์ '์ ์ํํ ์ ์๋ค.
์ถ๋ ฅ์ ์ด '์ฝํ ํฌ์ '์ ์ต์ ํ์๋ฅผ ์ถ๋ ฅํด์ผ ํ๋ค. ๋ฐ๋ผ์ ์ฝํ ํฌ์ ์ ํ์ง ์๊ณ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ๊ฒฝ์ฐ๋ ์๋๋ฐ,
์ด์ ๊ฐ์ ๊ฒฝ์ฐ๋ 0์ ์ถ๋ ฅํ๋ฉด ๋๋ค.
( 3<=D<=13)
2. ํ์ด
1์ฐจ - 22.10.17
๋ฐฑํธ๋ํน ๋ฌธ์ ์ด๋ค.
tmp[][] ๋ฐฐ์ด์ ๋ง๋ค์ด์ map๊ณผ ๋์ผํ ๊ฐ์ ๋ฃ์ด์ฃผ๊ณ , ์ฌ๊ธฐ์ ์ง์ A๋ฅผ ๋ฃ๊ณ B๋ฅผ ๋ฃ๊ณ ์๋ณตํด์ฃผ๋ ๊ฒ์ ๋ฐ๋ณตํ๋ค.
dfs์์ ๋ค์์ ๋ฐ๋ณตํ๋ค. ํ๋ผ๋ฏธํฐ๋ก ์์น ํ๊ณ ๊ฐ๋ ํ์์ ์ธต์๋ฅผ ๋๊ฒจ์ค๋ค.
1. ์ฝํ ํฌ์ ์ํ๊ณ ๊ฐ์ ๊ฒฝ์ฐ (์์น X)
2. ์ฝํ ํฌ์ A๋ก ํ๊ณ ๊ฐ์ ๊ฒฝ์ฐ (A๋ก ์์น )
3. ์ฝํ ํฌ์ B๋ก ํ๊ณ ๊ฐ์ ๊ฒฝ์ฐ (B๋ก ์์น )
4. ๋ค ํด๋ดค์ผ๋ ์๋ณต (์์น ํ๊ฑฐ ์๋ณต)
๊ทธ๋ฆฌ๊ณ ๊ธฐ์ ์กฐ๊ฑด์์
D-1์ธต ์ ๋ถ ๋ค ๋ดค์ ๊ฒฝ์ฐ, ์กฐ๊ฑด์ ๋ง์กฑํ๋ฉด ํ์ min์ ๊ฐฑ์ ํด์ค๋ค.
์กฐ๊ฑด์
๊ฐ ์ด์ ๋ํ์ฌ ํ์ฌ ์ธต์ ํน์ฑ์ด ์ด์ ์ธต์ ํน์ฑ๊ณผ ๋์ผํ๋ค๋ฉด cnt๋ฅผ ๋๋ ค์ฃผ๊ณ ,
๋ค๋ฅด๋ค๋ฉด cnt=1๋ก ๋ค์ ์ด๊ธฐํํด์ค๋ค.
cnt==K๊ฐ ๋๋ฉด flag๋ฅผ true๋ก ๋ฐ๊ฟ์ฃผ๊ณ ,
๋ง์ฝ D-1์ธต๊น์ง ๋ค ๋ดค์์๋ flag๊ฐ ์ฌ์ ํ false๋ผ๋ฉด, ๊ทธ๊ฒ์ ์กฐ๊ฑด์ ๋ง์กฑํ์ง ์๋ ๊ฒฝ์ฐ์ด๋ฏ๋ก
๋ ๋ณผ ํ์๊ฐ ์์ผ๋ false๋ฅผ ๋ฆฌํดํด์ค๋ค.
----
2์ฐจ - 22.11.15
๋ถ๋ถ์งํฉ(๋ฐฑํธ๋ํน) ๋ฌธ์ ์ด๋ค.
10์๋ถํฐ ํ์ด์ 2์์ ๋๋ฌ๋ค. dfs์๋ ๋ฌธ์ ๊ฐ ์์๊ณ ์ ๋ต ํ๋ณํ๋ ํจ์์์ ๋ฌธ์ ๊ฐ ์์๋ค.
๋ด๊ฐ ๋์น ๋ถ๋ถ์ K=1์ด ๋ ์ ์๋ค๋ ๊ฒ์ด์๋ค.
check() ํจ์์์ ์นด์ดํธ๋ฅผ 1๋ก ์ด๊ธฐํํ๊ณ ์ด์ ๊ฐ๊ณผ ํ์ฌ๊ฐ์ด ๊ฐ์ผ๋ฉด 1์ ๋๋ ค์ค ๋ค์
cnt๊ฐ์๊ฐ K์ ๊ฐ์์ง ๋ดค๋๋ฐ
์ด๋ ๊ฒํ๋ฉด ์ด์ ๊ฐ๊ณผ ํ์ฌ๊ฐ์ด ๊ฐ์์ 2๊ฐ ๋์๋๋ฐ K๋ 1์ธ ๊ฒฝ์ฐ๊ฐ ๋ฐ์ํ ์ ์๋ค.
์ด ๊ฒฝ์ฐ๊ฐ ๋ฌด์๋๋ค. ๊ทธ๋์ ํ ์คํธ์ผ์ด์ค 49/50 ๊ฐ์ ์ฐ์์ด์๋ค.
K๊ฐ 1์ผ ๋๋ ๋ฌด์กฐ๊ฑด true๋ฅผ ๋ฆฌํดํด์ผ ํ๋ค. ์ด๊ฑธ check()ํจ์ ๋งจ ์ฒซ์ค์ ์ถ๊ฐํ๋๊น ํต๊ณผํ๋ค.
* ์ ํ์ํ๊ณ ๊ฐ๋ dfs๋ถํฐ ํด์ฃผ๋๊ฒ ๋น ๋ฅด๋ค.
์ ํ์ํ๋ dfs ๋จผ์ ํ์ ๋
์ ํํ๋ dfs ๋จผ์ ํ์ ๋
3. ์ฝ๋
1์ฐจ (์๋ฃจ์ ์ฐธ๊ณ ํด์ ํ) 22.10.17
import java.io.*;
import java.util.*;
public class SW_2112_๋ณดํธํ๋ฆ {
static int W, D, K, ans;
static int[][] map, tmp;
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = null;
int T = Integer.parseInt(br.readLine());
for (int tc=1; tc<=T; tc++) {
st = new StringTokenizer(br.readLine());
D = Integer.parseInt(st.nextToken());
W = Integer.parseInt(st.nextToken());
K = Integer.parseInt(st.nextToken());
map = new int[D][W];
tmp = new int[D][W];
for (int i=0; i < D; i++) {
st = new StringTokenizer(br.readLine());
for (int j = 0; j<W; j++) {
int num = Integer.parseInt(st.nextToken());
map[i][j] = tmp[i][j] = num;
}
}
ans = Integer.MAX_VALUE;
if (check()) ans=0;
else dfs(0,0);
System.out.println("#"+tc+" "+ans);
}
}
static void dfs(int floor, int cnt) { //cnt:์ค ์๊น ๋ฐ๊พผ ํ์
if (cnt >= ans) return;
if (floor == D) {
if (check()) {
ans = Math.min(ans, cnt); //์ ์ผ ์ ๊ฒ ๋ฐ๊ฟ์ค ํ์
}
return;
}
dfs(floor+1, cnt); //์์น ์ํจ
for (int i=0; i < W; i++) {
tmp[floor][i]=0; //A๋ก ์์น
}
dfs(floor+1, cnt+1);
for (int i=0; i<W; i++) {
tmp[floor][i]=1; //B๋ก ์์น
}
dfs(floor+1, cnt+1);
for (int i=0; i<W; i++) {
tmp[floor][i] = map[floor][i]; //์๋ณต
}
}
static boolean check() {
for (int x=0; x<W; x++) {
boolean isOk = false;
int cnt=1;
for (int y=1; y<D; y++) {
if (tmp[y][x] == tmp[y-1][x]) cnt++;
else cnt=1;
if (cnt == K) {
isOk = true;
break;
}
}
if (!isOk) return false;
}
return true;
}
}
2์ฐจ (์๋ฃจ์ ์๋ด) - 22.11.15
package a22_11_14;
import java.io.*;
import java.util.*;
public class SW_2112_๋ณดํธํ๋ฆ {
static int D,W,K, ans;
static int[][] map, cmap;
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = null;
int T = Integer.parseInt(br.readLine());
for (int tc=1; tc<=T; tc++) {
st = new StringTokenizer(br.readLine());
D = Integer.parseInt(st.nextToken());
W = Integer.parseInt(st.nextToken());
K = Integer.parseInt(st.nextToken());
map = new int[D][W];
cmap = new int[D][W];
for (int i=0; i<D; i++) {
st = new StringTokenizer(br.readLine());
for (int j=0; j<W; j++) {
map[i][j] = Integer.parseInt(st.nextToken());
cmap[i][j] = map[i][j];
}
} //์
๋ ฅ ๋
ans = Integer.MAX_VALUE;
subset(0, 0);
System.out.println("#"+tc+" "+ans);
}
}
static void subset(int cnt, int used) {
if (ans < used) return;
if (cnt == D) {
if (check() == true) {
ans = Math.min(ans, used);
}
return;
}
subset(cnt+1, used);
A(cnt);
subset(cnt+1, used+1);
B(cnt);
subset(cnt+1, used+1);
restore(cnt);
}
static boolean check() {
if (K == 1) return true; //๋ด๊ฐ ๋์น ๋ถ๋ถ : K๊ฐ 1์ด๋ ์ ์๋ค
for (int i=0; i<W; i++) {
boolean isCan = false;
int cnt = 1;
int before=cmap[0][i]; //๋งจ ์ฒซ์ค
for (int j=1; j<D; j++) {
int now = cmap[j][i];
if (before==now) {
cnt++;
if (cnt==K) {
isCan = true;
break;
}
} else {
cnt = 1;
}
before = now;
}
if (isCan != true) return false;
}
return true;
}
static void A(int cnt) {
for (int i=0; i<W; i++) {
cmap[cnt][i] = 0;
}
}
static void B(int cnt) {
for (int i=0; i<W; i++) {
cmap[cnt][i] = 1;
}
}
static void restore(int cnt) {
for (int i=0; i<W; i++) {
cmap[cnt][i] = map[cnt][i];
}
}
}
4. ์ฌ๋ด
check()ํจ์๊ฐ ์คํ๋ ค dfs๋ณด๋ค ์ด๋ ค์ ๋ ๋ฌธ์ ์๋ค.
์ด์ ์ ์๋ฃจ์ ๋ณด๊ณ ํ์๋ ๋ฌธ์ ์ธ๋ฐ ์๋ฃจ์ ์์ด ๋ค์ํ๋ ค๊ณ ํ๋๊น ๋ง๋งํ๋ค.
์์ง ๊ฐ๊ธธ์ด ๋ฉ๋ค๋๊ฑธ ๋ ๊นจ๋ซ๋๋ค. ๋ถ์ง๋ฐํ ํ์
'Algorithm > SWEA' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[SWEA] 14510. ๋๋ฌด ๋์ด - Java (0) | 2022.10.26 |
---|---|
[SWEA] 2115. [๋ชจ์ SW ์ญ๋ํ ์คํธ] ๋ฒ๊ฟ์ฑ์ทจ - Java (0) | 2022.10.24 |
[SWEA] 5650. [๋ชจ์ SW ์ญ๋ํ ์คํธ] ํ๋ณผ ๊ฒ์ Java (0) | 2022.10.22 |
[SWEA] 2383. [๋ชจ์ SW ์ญ๋ํ ์คํธ] ์ ์ฌ ์์ฌ์๊ฐ Java (0) | 2022.10.02 |
[SWEA] 5644. [๋ชจ์ SW ์ญ๋ํ ์คํธ] ๋ฌด์ ์ถฉ์ Java (0) | 2022.10.01 |