-
[Algo Rhythm๐บ๐] BOJ 17520. Balanced StringAlgo Rhythm๐บ๐/BOJ 2020. 8. 24. 13:36
๐ ๋ฌธ์ ์ค๋ช
0๊ณผ 1๋ก ์ด๋ฃจ์ด์ง ์ด์ง ๋ฌธ์์ด 0101101์ 0๊ณผ 1์ ๊ฐ์์ ์ฐจ์ด๊ฐ 1 ์ดํ์ด๋ค. ๋ฟ๋ง ์๋๋ผ, ์ฒซ ๋ฒ์งธ ๋ฌธ์๋ฅผ ํฌํจํ๋ ๋ชจ๋ ๋ถ๋ถ ๋ฌธ์์ด 0, 01, 010, 0101, 01011, 010110, 0101101 ๋ชจ๋ 0๊ณผ 1์ ๊ฐ์์ ์ฐจ์ด๊ฐ 1 ์ดํ์ด๋ค.
์ด์ ๊ฐ์ด, ์ด์ง ๋ฌธ์์ด ์ค์์ ์ฒซ ๋ฒ์งธ ๋ฌธ์๋ฅผ ํฌํจํ๋ ๋ชจ๋ ๋ถ๋ถ ๋ฌธ์์ด์ 0๊ณผ 1์ ๊ฐ์์ ์ฐจ์ด๊ฐ 1์ดํ์ธ ๋ฌธ์์ด์ ๊ท ํ์กํ ๋ฌธ์์ด์ด๋ผ ๋ถ๋ฅธ๋ค. ๋ฌธ์์ด ์์ฒด๋ ์์ ์ ๋ถ๋ถ ๋ฌธ์์ด์ด๋ค.
์์ ์ ์ n ์ด ์ฃผ์ด์ง ๋, ๊ธธ์ด๊ฐ n ์ธ ์ด์ง ๋ฌธ์์ด ์ค์์ ๊ท ํ์กํ ๋ฌธ์์ด์ ์๋ฅผ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์๋ฅผ ๋ค์ด, n = 3์ธ ๊ฒฝ์ฐ์๋ 010, 011, 100, 101 ๋ค ๊ฐ์ ๋ฌธ์์ด์ด ๊ท ํ์กํ ๋ฌธ์์ด์ด๋ค.
์ ๋ ฅ
์ ๋ ฅ์ ํ์ค์ ๋ ฅ์ ์ฌ์ฉํ๋ค. ์ฒซ ๋ฒ์งธ ์ค์ ์์ ์ ์ n (1 ≤ n ≤ 100,000)์ด ์ฃผ์ด์ง๋ค.์ถ๋ ฅ
์ถ๋ ฅ์ ํ์ค์ถ๋ ฅ์ ์ฌ์ฉํ๋ค. ๊ธธ์ด๊ฐ n ์ธ ์ด์ง ๋ฌธ์์ด ์ค์์ ๊ท ํ์กํ ๋ฌธ์์ด์ ๊ฐ์๋ฅผ 16769023๋ก ๋๋ ๋๋จธ์ง ๊ฐ์ ํ ์ค์ ์ถ๋ ฅํ๋ค.๐ฏ ์ด๋ป๊ฒ ํ์๋
1. Backtracking (์๊ฐ ์ด๊ณผ)
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class Main { static int nBalancedString = 0; public static void main(String[] args) { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); try { int n = Integer.parseInt(br.readLine()); backtrack(0, 0, 0, n); System.out.println(nBalancedString % 16769023); } catch (NumberFormatException | IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public static void backtrack(int nZero, int nOne, int level, int n) { if(level == n) { nBalancedString++; return; } if(Math.abs((nZero + 1) - nOne) <= 1) { backtrack(nZero + 1, nOne, level + 1, n); } if(Math.abs(nZero - (nOne + 1)) <= 1) { backtrack(nZero, nOne + 1, level + 1, n); } } }
2. ์จ๊ฒจ์ง ์ฑ์ง ์ด์ฉ
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class BOJ_17520 { public static void main(String[] args) { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); try { int n = Integer.parseInt(br.readLine()); int ans = 1; int power = (n % 2 == 0) ? n / 2 : n / 2 + 1; for(int i = 0; i < power; i++) { ans = (ans * 2) % 16769023; } System.out.println(ans); } catch (NumberFormatException | IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
๐ง ์ ์ ๋ ๊ฒ ํ์๋
1. Backtracking
๊ท ํ์กํ ๋ฌธ์์ด์ด๋ ๋ชจ๋ ๋ถ๋ถ ๋ฌธ์์ด์ 0๊ณผ 1์ ๊ฐ์์ ์ฐจ์ด๊ฐ 1์ดํ์ธ ๋ฌธ์์ด์ ๋งํ๋ค. ์ด๊ฒ์ ์ ์๊ฐํด๋ณด๋ฉด ํ ๋ฌธ์์ด์์ 0 ํน์ 1์ ๋ถ์ฌ์ ์์ ๋ฌธ์์ด์ ๋ง๋ค ๋ ํด๋น ๋ฌธ์์ด์ด ๊ท ํ์กํ ๋ฌธ์์ด์ด ์๋๋ผ๋ฉด ๊ทธ ์์๋ ์ ๋ ๊ท ํ์กํ ๋ฌธ์์ด์ด ๋ ์ ์๋ค๋ ๊ฒ์ ์ ์ ์๋ค.
์ด ์ฑ์ง์ ์ด์ฉํ๋ฉด ์ด ๋ฌธ์ ๋ ๊ธธ์ด๊ฐ 0์ธ ๋น ๋ฌธ์์ด๋ถํฐ ๋ค์ 0 ํน์ 1์ ๋ถ์ฌ๊ฐ๋ฉด์ ์์ ๋ฌธ์์ด์ ๋ง๋๋๋ฐ ๊ทธ ์์์ด ๊ท ํ์กํ ๋ฌธ์์ด์ผ ๋๋ง ์์ฑํ๋ฉด์ ๊ธธ์ด๊ฐ n์ธ ๋ฌธ์์ด๋ค์ ๊ฐ์๋ฅผ ์ธ๋ ๋ฌธ์ ๋ก ์ดํดํ ์ ์๋ค. ๋ค์์ ์ดํด๋ฅผ ๋๊ธฐ ์ํ ๊ทธ๋ฆผ์ด๋ค.
์ด๋ ๊ฒ ๋ฌธ์ ๋ฅผ ์ดํดํ๊ณ ๋๋ฉด ์ด๋ ์ ํ์ ์ธ backtracking ๋ฌธ์ ๋ผ๋ ๊ฒ์ ์ ์ ์๋ค.
ํ์ง๋ง ์๊ฐ ์ด๊ณผ๋ก ์ธํด ์คํจํ๋ค.
2. ์จ๊ฒจ์ง ์ฑ์ง ์ด์ฉ
์ฒซ๋ฒ์งธ ์ ๊ทผ์ฒ๋ผ Tree๋ก ๋ณธ๋ค๋ฉด level์ด ์ง์์ผ ๋ ์์์ ์๋ ๋ถ๋ชจ์ ์ * 2 ์ธ ๊ฒ์ ์ ์ ์๋ค. ๊ทธ๋ฆฌ๊ณ level์ด ํ์์ผ ๋ ์์์ ์๋ ๋ถ๋ชจ์ ์์ ๊ฐ๋ค๋ ๊ฒ์ ์ ์ ์๋ค.
์ด ์ฑ์ง์ ์ด์ฉํด์ ์ฝ๋๋ฅผ ๊ตฌํํ๋ ํต๊ณผํ ์ ์์๋ค.๐ ๋ฌด์์ ๋ฐฐ์ ๋
ACM-ICPC ๋ฌธ์ ๋ ์ ํ์๊ฐ์ ์๊ฒฉํ๊ฒ ์ ์ํ๋ ๋ฏํ ๋๋์ ๋ฐ์๋ค.
'Algo Rhythm๐บ๐ > BOJ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Algo Rhythm๐บ๐]BOJ 13458 - ์ํ๊ฐ๋ (0) 2021.03.09 [Algo Rhythm๐บ๐] BOJ 16288. Passport Control (0) 2020.09.03 [Algo Rhythm๐บ๐] BOJ 17528. Two Machines (0) 2020.08.26 [Algo Rhythm๐บ๐] BOJ 17626. Four Squares (0) 2020.08.24 [Algo Rhythm๐บ๐] BOJ 17521. Byte coin (0) 2020.08.24