๐Ÿ“Œ ์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์ค€๋น„ :: ๋ฐฑ์ค€16974 :: ์žฌ๊ท€ - ๋ ˆ๋ฒจํ–„๋ฒ„๊ฑฐ๐Ÿ‘€

Dev-Oยท2022๋…„ 1์›” 27์ผ
0

CodingTest

๋ชฉ๋ก ๋ณด๊ธฐ
6/18

๋ฌธ์ œ


ํ•ด์„๊ณผ์ •

  • B๋Š” ๋นต์ด๊ณ , P๋Š” ํŒจํ‹ฐ๋ฅผ ์˜๋ฏธํ•œ๋‹ค.
  • ๋ ˆ๋ฒจ 0 ํ–„๋ฒ„๊ฑฐ๋Š” Pํ•˜๋‚˜๋งŒ ์กด์žฌํ•œ๋‹ค.
  • ํ–„๋ฒ„๊ฑฐ์˜ ๊ตฌ์„ฑ์€ B+๋ ˆ๋ฒจ-1+P+๋ ˆ๋ฒจ-1+B์˜ ๊ตฌ์กฐ์ด๋‹ค.
    ์˜ˆ) ๋ ˆ๋ฒจ5 ํ–„๋ฒ„๊ฑฐ : B+๋ ˆ๋ฒจ4๋ฒ„๊ฑฐ+P+๋ ˆ๋ฒจ4๋ฒ„๊ฑฐ+P๊ฐ€ ๋œ๋‹ค.
    ์—ฌ๊ธฐ์„œ ์žฌ๊ท€๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.
  • ์ด ๋ฒ„๊ฑฐ๋ฅผ ๋ฐ‘์—์„œ๋ถ€ํ„ฐ X๊ฐœ๋ฅผ ์…€๋•Œ ํŒจํ‹ฐ์˜ ๊ฐฏ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ์ด๋‹ค.

์ฒ˜์Œ์—๋Š” String์„ ํ™œ์šฉํ•ด ํ–„๋ฒ„๊ฑฐ๊ตฌ์กฐ๋ฅผ ๋‹จ์ˆœ ์žฌ๊ท€๋กœ ๊ตฌํ˜„ํ•œ ๋’ค ํŒจํ‹ฐ์˜ ๊ฐฏ์ˆ˜๋ฅผ ์„ธ๋ ค๊ณ  ํ–ˆ๋‹ค. 2^n์œผ๋กœ ์žฌ๊ท€๊ฐ€ ๋ฐ˜๋ณต๋ผ ๋‚˜์ค‘์—๋Š” ์ •๋ง ํฐ ๋ฌธ์ž์—ด์ด ์ƒ๊ฒจ๋‚œ๋‹ค. ๋”ฐ๋ผ์„œ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๊ฒŒ ๋๋‹ค.

ํ’€์ด

๐Ÿ’ก ์กฐ๊ฑด์„ ์ž˜ ์งœ์„œ ๋ฐ˜์”ฉ ์ค„์—ฌ๋‚˜๊ฐ€๋ฉด์„œ ํŒจํ‹ฐ ์ˆ˜๋ฅผ ์„ธ์–ด๋‚˜๊ฐ€๋ฉด ๋œ๋‹ค!

  • ํ˜„์žฌ๋ ˆ๋ฒจ์ด 0์ธ ๊ฒฝ์šฐ -> ํŒจํ‹ฐ ํ•˜๋‚˜๋งŒ ์žˆ์Œ
  • ํ˜„์žฌ๋ ˆ๋ฒจ์ด 0์ด ์•„๋‹Œ ๊ฒฝ์šฐ -> ๋ ˆ๋ฒจ ํ–„๋ฒ„๊ฑฐ
    1. X๊ฐ€ 1์ผ๋•Œ
    2. X๊ฐ€ ์ด B,P์˜ ๋ฐ˜ ๋ณด๋‹ค ์ž‘์„ ๋•Œ -> ๋ฐ˜ ์ดํ›„๋Š” ๋ฒ„๋ฆฌ๊ณ  ์žฌ๊ท€ํ˜ธ์ถœ
    3. X๊ฐ€ ์ด B,P์˜ ๋ฐ˜๊ณผ ๊ฐ™์„ ๋•Œ -> ์ด์ „๋ ˆ๋ฒจ์˜ ์ดํŒจํ‹ฐ์ˆ˜ + 1 ๋ฐ˜ํ™˜
    4. X๊ฐ€ ์ด B,P์˜ ๋ฐ˜๋ณด๋‹ค ํด ๋•Œ -> ๋ฐ˜ ์ด์ „ ํŒจํ‹ฐ์ˆ˜ + ์žฌ๊ท€ํ˜ธ์ถœ
    5. X๊ฐ€ ์ด B,P์™€ ๊ฐ™์„๋•Œ -> ์ด ํŒจํ‹ฐ์ˆ˜ ๋ฐ˜ํ™˜

    ๐Ÿ’ก ๊ฒฝ์šฐ์˜ ์ˆ˜์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๊ทœ์น™์€ ์ฝ”๋“œ๋กœ ํ™•์ธํ•˜ํ•˜๋ฉด ๋œ๋‹ค.

  • ์ด B,P ์ˆ˜์™€ P์ˆ˜ ๊ตฌํ•˜๋Š” ๋ฒ•์€ ๋ฐฐ์—ด์— 1๋ถ€ํ„ฐ N๊นŒ์ง€ ๋ฒ„๊ฑฐ๊ทœ์น™์„ ๋Œ๋ ค์„œ ๊ตฌํ•˜๋ฉด๋œ๋‹ค.
  • ์˜ˆ์ƒ์œผ๋กœ๋Š” ๋ฐ˜์”ฉ ์ค„์—ฌ๋‚˜๊ฐ€๋Š” ์‹์œผ๋กœ

์ฝ”๋“œ

package Reculsive;
import java.util.Scanner;


//๋ ˆ๋ฒจ-0 ๋ฒ„๊ฑฐ๋Š” ํŒจํ‹ฐ๋งŒ์œผ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค.
//	๋ ˆ๋ฒจ-L ๋ฒ„๊ฑฐ๋Š” B, ๋ ˆ๋ฒจ-(L-1) ๋ฒ„๊ฑฐ, P, ๋ ˆ๋ฒจ-(L-1)๋ฒ„๊ฑฐ,B์œผ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค. (L โ‰ฅ 1)
//	์˜ˆ๋ฅผ ๋“ค์–ด, ๋ ˆ๋ฒจ-1 ๋ฒ„๊ฑฐ๋Š” 'B P P P B', ๋ ˆ๋ฒจ-2 ๋ฒ„๊ฑฐ๋Š” 'B BPPPB P BPPPB B'์™€ ๊ฐ™์ด ์ƒ๊ฒผ๋‹ค. (B๋Š” ํ–„๋ฒ„๊ฑฐ๋ฒˆ, P๋Š” ํŒจํ‹ฐ)
//
//	์ƒ๋„๊ฐ€ ์ƒ๊ทผ๋‚ ๋“œ์— ๋ฐฉ๋ฌธํ•ด์„œ ๋ ˆ๋ฒจ-N ๋ฒ„๊ฑฐ๋ฅผ ์‹œ์ผฐ๋‹ค. ์ƒ๋„๊ฐ€ ํ–„๋ฒ„๊ฑฐ์˜ ์•„๋ž˜ X์žฅ์„ ๋จน์—ˆ์„ ๋•Œ, ๋จน์€ ํŒจํ‹ฐ๋Š” ๋ช‡ ์žฅ์ผ๊นŒ? ํ•œ ์žฅ์€ ํ–„๋ฒ„๊ฑฐ๋ฒˆ ๋˜๋Š” ํŒจํ‹ฐ ํ•œ ์žฅ์ด๋‹ค.
public class Bj16974_LevelBurger {

		private static long[] total;
		private static long[] patty;	
		public static void main(String[] args) {
			
			
			Scanner sc = new Scanner(System.in);
			int N = sc.nextInt();
			long X = sc.nextLong();
			
			total = new long[N+1];
			patty = new long[N+1];
			
			total[0] = 1 ; patty[0] = 1; // ์ด์žฌ๋ฃŒ์ˆ˜๋ž‘ ํŒจํ‹ฐ๊ฐฏ์ˆ˜ ๊ตฌํ•˜๊ธฐ ์œ„ํ•ด ์ฒ˜์Œ ํŒจํ‹ฐํ•œ์žฅ์žˆ๋Š”๊ฑธ ์ดˆ๊ธฐํ™” ํ•ด์คŒ  
			
			for(int i = 1 ; i <= N ; i++) {
				total[i] = 1+total[i-1]+1+total[i-1]+1;//N์ด 1, 2, 3,...์ผ ๊ฒฝ์šฐ๋ฅผ ์ฐจ๋ก€๋กœ ๋ฐฐ์—ด์— ๊ฐฏ์ˆ˜๋ฅผ ์ €์žฅํ•ด์คŒ
				patty[i] = patty[i-1]+1+patty[i-1];//๋นต๋ง๊ณ  ํŒจํ‹ฐ๋งŒ ๊ฐฏ์ˆ˜ ์ถ”๊ฐ€ 
			}
			
			System.out.println(CountPatty(N, X));
			
		}
		//1 p
		//5 BPPPB
		//  BBPPPB P BPPPBB
		public static long CountPatty(int N, long X) {
			if(N==0) {
				if(X==0) return 0; //๋ ˆ๋ฒจ๋„ 0์ด๊ณ  ํ•œ์žฅ๋„ ์•ˆ๋จน์—ˆ์„ ๊ฒฝ์šฐ
				else return 1; //๋ ˆ๋ฒจ 0์ธ๋ฐ ํ•œ์žฅ ๋จน์—ˆ์„ ๊ฒฝ์šฐ
			} 
			//N->0์ด ์•„๋‹๋•Œ x์žฅ ๋จน์—ˆ์„๋•Œ ๋จน์€ ํŒจํ‹ฐ ์ˆ˜ ๊ตฌํ•˜๊ธฐ 
			if(X==1) return 0;//์ผ๋‹จ ํ•œ์žฅ ๋จน์œผ๋ฉด ๋งจ๋ฐ‘์— ๋นต์ด๋ผ ํŒจํ‹ฐ 0๊ฐœ ๋จน์Œ ใ…‹ใ…‹
			else if(X <= 1+total[N-1] ) { //์ค‘์•™ ํŒจํ‹ฐ P๋ณด๋‹ค ์ž‘์€ ๊ฒฝ์šฐ -> ํ˜„์žฌ์˜ ๋ฐ˜์€ ์ด์ „๋ ˆ๋ฒจ์— ๋นตํ•˜๋‚˜๋งŒ ๋”ํ•œ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ด์ „ ํ˜ธ์ถœ +1(๋นต)์„ ํ•ด์ค€๊ฒƒ
				return CountPatty(N-1, X-1);//์ด์ „ ๋นต๋ณด๋‹ค ์ž‘๊ธฐ ๋•Œ๋ฌธ์— ์ด์ „๋นต์œผ๋กœ ๋‹ค์‹œ๋น„๊ตํ•˜๊ธฐ ์œ„ํ•ด + x-1์€ ๋งจ์•ž์˜๋นต์€ ์…€ ํ•„์š”๊ฐ€ ์—†์–ด์„œ
			}else if(X == 1+total[N-1]+1 ) {//๋ฐ˜ + 1(์ค‘์•™ํŒจํ‹ฐ) == X๊ฐ’์ด ์ค‘์•™๊ฐ’๊ณผ ๊ฐ™์„ ๋•Œ
				return patty[N-1]+1;//์ด์ „๊ฑฐ ํŒจํ‹ฐ์— +1(ํŒจํ‹ฐ)๋งŒ ํ•ด์ฃผ๋ฉด ๋จ
			}else if(X < total[N]) {//๋ฐ˜ +1(์ค‘์•™ํŒจํ‹ฐ) <= X๊ฐ’์ด ์ค‘์•™๊ฐ’๋ณด๋‹ค ํด๋•Œ
				return patty[N-1]+1+CountPatty(N-1, X-(1+total[N-1]+1)); //๋ฐ˜๋ณด๋‹ค ํฌ๋ฉด ๋ฐ˜๊นŒ์ง„ ์ด์ „๋ ˆ๋ฒจํŒจํ‹ฐ๊ฐฏ์ˆ˜๋กœ ์„ธ๊ณ  ๋‚˜๋จธ์ง€X๋Š” ์ด์ „๋ ˆ๋ฒจ ์ด ์žฌ๋ฃŒ+๋นต+ํŒจํ‹ฐ๋งŒํผ ์ค„์ธ๋‹ค์Œ์— ์žฌ๊ท€ํ•˜๋ฉด ๋œ๋‹ค.
			}else {//X๊ฐ€ total ์ด๋ž‘ ๊ฐ™์„๋•Œ 
				return patty[N];
			}
			 
			
			//N = 4, x = 5 // N=2 x=4
		}


}
profile
Being Outstanding needs Understanding๐Ÿš€

0๊ฐœ์˜ ๋Œ“๊ธ€