์ดํดํ์ง ๋ชปํ๋ ๋ด๊ฐ ๋๋ฌด ๋ต๋ตํ๋ค!
SSAFY ์ค๋น๋ฅผ ์ํด CT(Computer Thinking) ๋ฌธ์ ๋ฅผ ์ฐ์ตํ๋ ์ค ์นด๋ ๋ค์ง๊ธฐ ๋ฌธ์ ๋ฅผ ๋ง๋ฌ๋ค.
์นด๋ ๋ค์ง๊ธฐ
N๊ฐ์ ์นด๋๊ฐ ์๋ฉด์ 1 ๋ท๋ฉด์ 0 ์ผ๋ก ์ฃผ์ด์ง๋ค.
1๋ฒ์ '์ฐฌ์ค' ๋ฅผ ์ฌ์ฉํ์ฌ i๋ฒ์งธ, i-1๋ฒ์งธ, i+1๋ฒ์งธ ์นด๋๋ฅผ ๋์์ ๋ค์ง๋๋ค.(1๋ฒ์ ์ฐฌ์ค๋ก ์ธ์ ํ ์นด๋๊น์ง ๋ค์ง๋๋ค.)
์นด๋์ ์,๋ท ๋ฉด ์ ๋ณด๊ฐ 0๊ณผ 1 ๋ก ์ฃผ์ด์ง ๋ ๋ชจ๋ ๋ท๋ฉด์ผ๋ก ๋ง๋๋ ์ต์ ์ฐฌ์ค ๊ฐ์๋ฅผ ๊ตฌํ์ฌ๋ผ.
์์)
0 0 1 1 1 0 0 1 1 0 1 1 0 0 0 0 0 0 0 0
์์๋ต) 3 ํ
์์ํ์ด)
1ํ>
0 0 0 0 0 0 0 1 1 0 1 1 0 0 0 0 0 0 0 0
2ํ>
0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0
3ํ>
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
๋ฌธ์
1๋ฒ) 0 1 1 1 1 0
2๋ฒ) 0 0 0 0 1 1 1 1 0
3๋ฒ) 0 0 1 1 0 1 1 0 1 1 1 0 1
4๋ฒ) 1 0 1 1 1 0 0 0 1 0 1 1 0 1 1 1 1 0
5๋ฒ) 0 1 1 0 1 1 0 1 1 0 0 1 1 0 0 1 1 1 0 1 1 0 0 1 0
์์ ๋ฌธ์ ์ธ๋ฐ, ์์ผ๋ก ๋ ธ๊ฐ๋ค๋ฅผ ํ๋ฉด ํ ์ ์๋ค. ํ์ง๋ง ์์ฐํ CT ๋ฌธ์ ์ธ๋ฐ, ๋ง๋ฌด๊ฐ๋ด๋ก ํ๋ฉด ์ค์ ์์ ๋ถ๋ฆฌํ ์ ์๋ค๋ ์๊ฐ์ ์ด๋ค ๋ถ์ด ๋๊ธ๋ก ์ค๋ช ํ ๋ด์ฉ์ ์ฐจ๊ทผํ ์ฝ์ด๋ณด๊ณ , ์จ๋ณด๊ณ , ๊ทธ๋ ค๋ ๋ดค๋ค.
๊ทธ๋ฐ๋ฐ ๋๋ฌด์ง ์ดํด๊ฐ ๋์ง ์์๋ค.
์ด ๋ฌธ์ ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ์ด์ฉํด์ ํผ๋ค๊ณ ํ๋ฉฐ, ์ฒซ ๋ฒ์งธ ์ซ์๋ฅผ ๋ค์ง๋ ๊ฒฝ์ฐ์ ๋ค์ง์ง ์๋ ๊ฒฝ์ฐ๋ฅผ ๊ฐ์ง๊ณ ์ต์ข
์ ์ธ ๊ฒฝ์ฐ์ ์๋ฅผ ํ์
ํด์ ์ ๋ต์ ๋ง์ถ ์ ์๋ค๊ณ ํ๋ค.(์ด ๋ง ์กฐ์ฐจ ์ดํดํ ์ ์๋ค.)
๋๋ ์๋ฌด๋ฆฌ ์ฝ์ด ๋ด๋ ํ์ด๋ฅผ ์ดํดํ ์ ์์๊ธฐ ๋๋ฌธ์ ๋ ๊ธฐ์ด ๋ฌธ์ ๋ฅผ ํ์ด ๋ณด๋ ๊ฒ์ด ์ข์ ๊ฒ ๊ฐ์ BOJ์ 2138๋ฒ ๋ฌธ์ ๋ฅผ ํ์ด ๋ณด๊ธฐ๋ก ํ๋ค.(์ง์ฅ ์์)
์ง์ฅ์ ์์ : 2138 ์ ๊ตฌ์ ์ค์์น
์ ๋ง ๊ฐ์ฌํ ๋ธ๋ก๊ทธ
์ด ๋ฌธ์ ๋ ์์ CT ๋ฌธ์ ์ ๋น์ทํ์ง๋ง ์กฐ๊ธ์ ๋ค๋ฅด๋ค.
๋จผ์ , ์
๋ ฅํ ๋ ๊ฐ์ ๋ฐฐ์ด(์ ๊ตฌ์ ๋ฐฐ์ด) ์ค ์ฒซ ๋ฒ์งธ ๋ฐฐ์ด์ด ๋ ๋ฒ์งธ ๋ฐฐ์ด๊ณผ ๊ฐ์์ง๊ธฐ ์ํด์๋ ๋ช ๋ฒ์ ์ ๊ตฌ ์ค์์น๋ฅผ ๋๋ฌ์ผ ํ๋์ง๋ฅผ ๊ตฌํ๋ ๋ฌธ์ ์ด๋ค.
๋จผ์ ํ์ธํด์ผ ํ ์ ์ ์ต์๊ฐ์ ๊ตฌํด์ผ ํ๋ค๋ ๊ฒ. ์ฆ, ์ฃผ์ด์ง ๋ฐฐ์ด์ ์ฒ์๋ถํฐ ๋๊น์ง ๋ฑ ํ๋ฒ๋ง ํ์ํ์ฌ ์ค์์น๋ฅผ ๋๋ฅผ ์ ์๋ค. ๊ทธ๋ฌ๋๊น ๊ฐ์ ์ธ๋ฑ์ค๋ฅผ ๋ ๋ฒ ์ด์ ํ์ํ์ฌ ์ค์์น๋ฅผ ๋๋ฅธ๋ค๋ ๊ฒ์ ์ฒซ ๋ฒ์งธ ๋ฐฐ์ด์ ๋ ๋ฒ์งธ ๋ฐฐ์ด๋ก ๋ง๋ค ์ ์๋ค๋ ์๋ฏธ์ด๋ค.(๋ผ๊ณ ๋ชจ๋ ๊ฐ๋ฐ์ ๋ธ๋ก๊ทธ์์ ๋งํ๋๋ผ. ์์ง๋ ์ดํดํ ์ ์์.)
i ๋ฒ์งธ ์ ๊ตฌ์ ์ค์์น๋ฅผ ๋๋ฅด๋ฉด i-1, i+1 ๋ฒ์งธ ์ ๊ตฌ๋ฅผ ๋๊ฑฐ๋ ํฌ ์ ์๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ i ๋ฒ์งธ ์ค์์น๋ฅผ ๋๊ฑฐ๋ ์ผ๊ธฐ ์ํด์ i-1, i, i+1 ๋ฒ์งธ ์ค์์น๋ฅผ ์ด์ฉํด์ผ ํ๋ค. ํ์ง๋ง ์ต์ํ์ด๋ผ๋ ์กฐ๊ฑด ๋๋ฌธ์ i-1 ๋ฒ์งธ ์ ๊ตฌ์ ์ค์์น๋ฅผ ํตํด i ๋ฒ์งธ ์ ๊ตฌ๋ฅผ ์ ์ดํ๋ ๊ฒฝ์ฐ์ ์๋ ๋ฐฐ์ ํ๋ ๊ฒ์ด ์ข๋ค.(๊ทธ๋ ๊ฒ ์ดํดํ๋ค.)
์ด ๋ฌธ์ ๋ฅผ ํ๋ฉด์ 0 ๋ฒ์งธ ์ ๊ตฌ์ ์ค์์น๋ฅผ ๋๋ ๋์ง ๋๋ฅด์ง ์์๋์ง๋ฅผ ๊ธฐ์ค์ผ๋ก ์ผ๋ ๊ฒ์ด ์ ๋ง ์ดํด๊ฐ ๊ฐ์ง ์๋๋ค. ๋ง์ ๋ธ๋ก๊ทธ๋ฅผ ์ฝ์ด ๋ด๋ ์ดํด๊ฐ ๊ฐ์ง ์๋๋ค.(์ง์ง ๋ฐ๋ณด๋ค.)
๊ฐ์ฅ ๋ง์ด ์ฐธ๊ณ ํ ๋ธ๋ก๊ฑฐ์ ๊ฒ์๋ฌผ์ ๋ณด๋ฉด ์ด๋ฐ ์ค๋ช
์ด ์๋ค. (1) i-1 ๋ฒ์งธ ์ ๊ตฌ๋ฅผ ๋ ๋ฒ์งธ ๋ฐฐ์ด์ i-1 ๋ฒ์งธ ์ ๊ตฌ์ ๋น๊ตํ๋ฉด์ ์ค์์น๋ฅผ ๋๋ฌ์ผ ํ ์ง ๋๋ฅด์ง ๋ง์์ผ ํ ์ง๋ฅผ ๊ฒฐ์ ํด์ ์ต์ํ์ ๊ฒฝ์ฐ์ ์๋ฅผ ๊ตฌํ๋ค.
๋จ, (2) 0 ๋ฒ์งธ์ ๊ฒฝ์ฐ -1 ๋ฒ์งธ ์ ๊ตฌ๋ ์์ผ๋ 0 ๋ฒ์งธ๋ฅผ ๋๋ ์ ๊ฒฝ์ฐ์ ๋๋ฅด์ง ์์์ ๊ฒฝ์ฐ๋ฅผ ๋น๊ตํ์ฌ ๋ ์ค ํ๋์ ๊ฒฝ์ฐ์์ ๋ ๋ฒ์งธ ๋ฐฐ์ด๊ณผ ๋๊ฐ์ ๋ ํด๋น ๊ฒฝ์ฐ์์ ๋ณ๊ฒฝ๋ ์นด์ดํธ๋ฅผ ์ถ๋ ฅํ๋ฉด ๋๋ค.
๋ง์ฝ ๋ ๊ฒฝ์ฐ ๋ชจ๋ (3) ๋ ๋ฒ์งธ ๋ฐฐ์ด๊ณผ ๊ฐ์ง ์๋ค๋ฉด ํด๋น ๋ฐฐ์ด์ ๋ณ๊ฒฝํ ์ ์๊ธฐ ๋๋ฌธ์ -1์ ์ถ๋ ฅํ๋ค.
์ฌ๊ธฐ์ ์ฒซ ๋ฒ์งธ, ๋ ๋ฒ์งธ ๋ฐฐ์ด์ i-1 ๋ฒ์งธ ์ ๊ตฌ๊ฐ ๊ฐ์ง ์์ ๊ฒฝ์ฐ i ๋ฒ์งธ ์ ๊ตฌ์ ์ค์์น๋ฅผ ๋๋ฌ ์ฒซ ๋ฒ์งธ i-1 ๋ฒ์งธ ์ ๊ตฌ๋ฅผ ๋ ๋ฒ์งธ ๋ฐฐ์ด์ i-1 ๋ฒ์งธ ์ ๊ตฌ์ ๋๊ฐ์ด ๋ง์ถฐ ์ค๋ค.
(์ง์ง ์๊ธฐ๋ค. ๊ธ์ ์ฝ์ ๋๋, ์ฝ๋๋ก ์์ฑํ ๋๋(์ค๋ง์ฃผ๋ผ๊ณ ํ ์ ์๋ค.) ์ ํ ์ดํด๊ฐ ๋์ง ์์๋๋ฐ, ๋ด๊ฐ ์ง์ ๊ธ๋ก ์ฐ๋๊น ํ๋์ฉ ์ดํด๊ฐ ๋๊ณ ์๋ค.)
์ด ์ค๋ช
์ ๋ธ๋ก๊ฑฐ ๋ถ๊ป์ ์์ฑํ์ ์ฝ๋๋ฅผ ๋ณด๋ฉด 0 ๋ฒ์งธ๋ฅผ ๋๋ ๋์ง ๋๋ฅด์ง ์์๋์ง๋ฅผ ๋น๊ตํ๊ธฐ ์ํด ์ฒซ ๋ฒ์งธ ๋ฐฐ์ด์ 2์ฐจ์ ๋ฐฐ์ด์ ๋ ๋ฒ ์ ์ฅํ๋ค.
์์ ์ค๋ช
์ ์นด์นด์คํก ์คํฌ๋ฆฐ์ท์ ์ค๋ช
๊ณผ๋ ๋์ผํ๋ค.
์ด์ ์ฝ๋๋ฅผ ์ดํด๋ณด์.(์ฐธ๊ณ ๋ธ๋ก๊ทธ์ ์ฝ๋์ ๋์ผํ๋ค.)
package ์ฌ์ฑํ.์๊ณ ๋ฆฌ์ฆ_5์ฃผ์ฐจ;
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class ์ ๊ตฌ์์ค์์น_2138 {
static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
static int n, count, answer;
static int[][] arr;
static int[] check;
public static void main(String[] args) throws Exception {
n = Integer.parseInt(br.readLine());
arr = new int[2][n];
check = new int[n];
answer = Integer.MAX_VALUE;
String input = br.readLine();
String input2 = br.readLine();
for (int i = 0; i < input.length(); i++) {
arr[0][i] = input.charAt(i) - '0';
arr[1][i] = input.charAt(i) - '0';
check[i] = input2.charAt(i) - '0';
}
// arr[0] : 0 ๋ฒ์งธ ์ ๊ตฌ๋ฅผ ์ผ์ง ์๋ ๊ฒฝ์ฐ
play(1, 0, 0);
// arr[1] : 0 ๋ฒ์งธ ์ ๊ตฌ๋ฅผ ํจ๋ค.
// arr[1][0], arr[1][1] ์ ๊ตฌ๊ฐ ์ผ์ง๋ค.
onoff(0, 1);
// arr[1] : 0 ๋ฒ์งธ ์ ๊ตฌ๋ฅผ ํจ ์ํ์์ ํ์ํ๋ค.
play(1, 1, 1);
for (int i = 0; i < n; i++) {
System.out.print(arr[1][i]);
}
System.out.println("\n");
// arr[0] ์ arr[1] ์ค ์ต์ํ์ count๋ฅผ ์ถ๋ ฅํ๋ค.
// ๋ง์ฝ ์ฃผ์ด์ง ์กฐ๊ฑด์ผ๋ก ์ ๊ตฌ๋ฅผ ๋ฐ๊พธ์ง ๋ชปํ ๊ฒฝ์ฐ -1์ ์ถ๋ ฅํ๋ค.
System.out.println(answer == Integer.MAX_VALUE ? -1 : answer);
}
// ์ ๊ตฌ์ ์ ์์ ์ค์์นํ๋ ๊ธฐ๋ฅ
public static void onoff(int idx, int type) {
for (int i = idx - 1; i <= idx + 1; i++) {
if (i >= 0 && i < n)
arr[type][i] = arr[type][i] == 1 ? 0 : 1;
}
}
// ์ฃผ์ด์ง ์ ๊ตฌ๋ฅผ ํ์ํ๋ค.
// ํ์ฌ ์ธ๋ฑ์ค์ -1์ ํด๋นํ๋ ์ธ๋ฑ์ค๊ฐ check์ ๋ค๋ฅธ ๊ฒฝ์ฐ
// ์ค์์น๋ฅผ ํจ๋ค.
// ๋ค์ play ๊ธฐ๋ฅ์ผ๋ก ๋์๊ฐ๋ค.
// ํ์ฌ ์ธ๋ฑ์ค์ -1์ ํด๋นํ๋ ์ธ๋ฑ์ค๊ฐ check์ ๊ฐ์ ๊ฒฝ์ฐ
// ์ค์์น๋ฅผ ์ผค ํ์๊ฐ ์์ผ๋
// ์ค์์น๋ฅผ ์ผ์ง ์๋๋ค.
// count๋ฅผ ์ธ์ง ์๋๋ค.
// ํ์ฌ ์ธ๋ฑ์ค๊ฐ n๊ณผ ๊ฐ์ ๊ฒฝ์ฐ ์ธ๋ฑ์ค ๋ฒ์๋ฅผ ๋์๊ธฐ ๋๋ฌธ์ ๋ฆฌํด
// ๋ง์ฝ n-1์ arr์ check์ ์ธ๋ฑ์ค ๊ฐ์ด ๊ฐ์ ๊ฒฝ์ฐ
// answer๋ count๋ณด๋ค ์์ ๊ฒฝ์ฐ count ๊ฐ์ด ๋๊ณ ,
// ์๋ ๊ฒฝ์ฐ์๋ answer ๊ฐ๊ทธ๋๋ก.
public static void play(int idx, int type, int count) {
if (idx == n) {
if (arr[type][idx - 1] == check[idx - 1])
answer = answer > count ? count : answer;
return;
}
for (int i = 0; i < n; i++) {
System.out.print(arr[type][i]);
}
System.out.println();
System.out.println("---------------");
if (arr[type][idx - 1] != check[idx - 1]) {
onoff(idx, type);
play(idx + 1, type, count + 1);
} else
play(idx + 1, type, count);
}
}
์ฝ๋๋ฅผ ์ฐ๋ฉด์๋ ์ดํด๊ฐ ๊ฐ์ง ์์์ ์ฃผ์์ ๋ง์ด ์์ฑํ๋ค.
์๋ ์ฝ๋๋ ์
๋ ฅ๊ฐ์ char ์๋ฃํ์ผ๋ก ๋ฐ์์ผ๋ฉฐ, String ์๋ฃํ์์ charOfArray()๋ผ๋ ๋ฉ์๋๋ฅผ ํตํด ๋ฌธ์์ด ์์ฒด๋ฅผ ๋ฐฐ์ด๋ก ๋ง๋ค์๋๋ฐ ์ด๋ฒ์ ์๊ฒ ๋์ด์ ์ ๋ง ์๋ก์ ๋ค.
๋ค๋ฅธ ๋ธ๋ก๊ทธ์์๋ ์์ ํ์์ ํ ์ ์์ผ๋ ์ฌ๊ท ํจ์๋ฅผ ์ฌ์ฉํ์ ๋ ์๊ฐ ๋ณต์ก๋์ ์ํด ์๊ฐ ์ด๊ณผ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํ๋ค๊ณ ํ๋๋ฐ, ์ด ๋ถ์ ๊ทธ ํ๊ณ๋ฅผ ๋ฐ์ด ๋์ผ์ จ๋ค. ์ ๋ง ๋๋จํ๋ค๊ณ ์๊ฐํ๋ค.
์ด๋ฒ ๋ฌธ์ ๋ฅผ ํ๋ฉด์(๋ด๊ฐ ํ์ง ์๊ณ ์ดํดํ๋ฉด์) ์๊ฐ ๋ณต์ก๋๋ฅผ ๋จผ์ ์ดํดํ๊ณ ๋ฌธ์ ๋ฅผ ์ ๊ทผํ๋ ๊ฒ์ด ์ค์ํ๋ค๊ณ ์๊ฐ๋๋ค. ์๋ํ๋ฉด ์ ๋ฒ ์ฃผ์ฐจ ๋ฌธ์ ์ค ์ ๋ ฌ ๋ฌธ์ ๋ฅผ ํ ๋๋ ์๊ฐ ๋ณต์ก๋ ๋๋ฌธ์ ๋ฌธ์ ๋ฅผ ๋ง์ถ์ง ๋ชปํ๋ค.(์ ๊ทผ๋ฒ์ด ์๋ชป๋๋ค.)
ํญ์ ๋๋ผ์ง๋ง ์ธ์ ์ฏค ๋ฌธ์ ๋ฅผ ์จ์ ํ ์ดํดํด์ ๋ด๊ฐ ์ง์ ์ฝ๋๋ฅผ ๊ตฌํํ ์ ์์๊น? ์ฌ์ค ๋ฌธ์ ๋ฅผ ์ฒ์ ๋ณด๋ฉด ๋จธ๋ฆฟ์์ผ๋ก ๊ทธ๋ ค์ง๊ธฐ๋ ํ์ง๋ง ์ด๊ฑธ ์ฝ๋๋ก ๊ตฌํํ ์ ์๋๋ฐ, ๊ทธ๋ด ๋ ๋๋ฌด ํ๊ฐ ๋๋ค.(love myself..โค๏ธ)
๊ทธ๋ฌ๋๊น ๋ํํ
ํ ๋ด์ง ์์ผ๋ ค๋ฉด ๋ ์ด์ฌํ ๊ณต๋ถํ๋ ์ ๋ฐ์ ์๋ค.
์์ ์์ ํ์ดํ
..!๐
'Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
ํ์ | ์์ฐจ ํ์, ์ด์ง ํ์, ๋ถํ ์ฐพ๊ธฐ (0) | 2020.11.07 |
---|---|
๋ฐฑ์ค 2667 | DFS, ๋จ์ง ๋ฒํธ ๋ถ์ด๊ธฐ (0) | 2020.11.02 |
Graph | DFS(๊น์ด ์ฐ์ ํ์), BFS(๋๋น ์ฐ์ ํ์) (0) | 2020.10.31 |
๋ฐฑ์ค 11729 | ์ฌ๊ท ํจ์, ํ๋ ธ์ด์ ํ ์ด๋ ์์ (2) | 2020.10.18 |
๋ฐฑ์ค 5585 | ๊ทธ๋ฆฌ๋ ์๊ณ ๋ฆฌ์ฆ, ๊ฑฐ์ค๋ฆ ๋ (0) | 2020.10.18 |