-
백준(BOJ) 16974번 레벨 햄버거알고리즘 풀이/백준(Boj) 2020. 1. 18. 14:45
문제 : https://www.acmicpc.net/problem/16974
16974번: 레벨 햄버거
상근날드에서 오랜만에 새로운 햄버거를 출시했다. 바로 레벨-L 버거이다. 레벨-L 버거는 다음과 같이 만든다. 레벨-0 버거는 패티만으로 이루어져 있다. 레벨-L 버거는 햄버거번, 레벨-(L-1) 버거, 패티, 레벨-(L-1)버거, 햄버거번으로 이루어져 있다. (L ≥ 1) 예를 들어, 레벨-1 버거는 'BPPPB', 레벨-2 버거는 'BBPPPBPBPPPBB'와 같이 생겼다. (B는 햄버거번, P는 패티) 상도가 상근날드에 방문해서 레벨-N 버거를 시켰
www.acmicpc.net
풀이 :
우선 hb [n] 은 n번째 레벨의 전체 재료의 수고 p [n] 은 p번째 레벨의 패티 수로 각 레벨의 전체 재료와 패티 수를 구한다.
그리고 x의 갯수에 따라 이전 레벨에서 처리하도록 넘겨주거나 그 값이 확실하다면 바로 반환하도록 하였다.
x 가 1이라면 무조건 햄버거 번이니 0을 반환하고
x 가 중앙에 오는 패티라면 전에 패티 + 중앙 패티가 답이 될 것.
코드 ( C++ )
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters#include <iostream> using namespace std; int n; long long x; // 전체 재료 long long hb[51]; //패티 수 long long p[51]; long long solve(int n, long long x) { if (n == 0) { if (x == 0) return 0; else if (x == 1) return 1; } if (x == 1) return 0; // 무조건 햄버거 번 else if (x <= 1 + hb[n - 1]) return solve(n - 1, x - 1); else if (x == 1 + hb[n - 1] + 1) return p[n - 1] + 1; else if (x <= 1 + hb[n - 1] + 1 + hb[n - 1]) return 1 + p[n - 1] + solve(n - 1, x - 1 - hb[n - 1] - 1); else return 2 * p[n - 1] + 1; } int main() { cin >> n >> x; hb[0] = 1; p[0] = 1; for (int i = 1; i <= n; ++i) { hb[i] = 1 + hb[i - 1] + 1 + hb[i - 1] + 1; p[i] = p[i - 1] + 1 + p[i - 1]; } cout << solve(n, x) << "\n"; return 0; } '알고리즘 풀이 > 백준(Boj)' 카테고리의 다른 글
백준(BOJ 1300) K번째 수 (0) 2020.02.07 백준(BOJ) 17825번 주사위 윷놀이 (0) 2020.01.23 백준(BOJ) 16957번 체스판 위의 공 (0) 2020.01.16 백준(BOJ) 17090번 미로 탈출하기 (0) 2020.01.16 백준(BOJ) 17088번 등차수열 변환 (0) 2020.01.12