ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Algo Rhythm๐Ÿ•บ๐Ÿ’ƒ] BOJ 17520. Balanced String
    Algo 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 ๋ฌธ์ œ๋Š” ์ œํ•œ์‹œ๊ฐ„์„ ์—„๊ฒฉํ•˜๊ฒŒ ์ œ์•ˆํ•˜๋Š” ๋“ฏํ•œ ๋Š๋‚Œ์„ ๋ฐ›์•˜๋‹ค.

    ๋Œ“๊ธ€

Designed by Tistory.