fragment-header
fragment-markdown
홈
로그인
로그아웃
내 블로그
설정
로그인
백준 34510 (C++) 초콜릿 우유가 좋아
최초 업로드: 2025-10-15 07:33:46
최근 수정 시간: 2025-10-15 07:33:46
게시자: rlatjwls3333
카테고리: 백준
조회수: 10
# [Bronze II] 초콜릿 우유가 좋아 [문제 링크](https://www.acmicpc.net/problem/34510) ## 문제 설명 <p>피자는 우유가 좋다. 그중에서도 초콜릿 우유를 가장 좋아한다. 초콜릿 우유를 너무 좋아한 나머지, 피자는 초콜릿 우유갑을 이용해 우유탑을 쌓아 올리려고 한다.</p> <p>우유갑은 위에서부터 꼭지, 머리, 몸통의 세 부분으로 이루어져 있다. 우유갑의 모습을 옆에서 본 그림을 기준으로 위에서부터 차례대로 선분, 이등변삼각형, 직사각형의 모양을 하고 있고 각 부분의 높이는 각각 $H_1$, $H_2$, $H_3$이다. $(H_1 \le H_2 \le H_3)$</p> <p>피자는 우유갑을 여러 개 쌓아 $N$층 우유탑을 만들려고 한다. 우유탑을 쌓는 과정은 다음과 같다. 정방향은 우유갑의 꼭지가 위로 향하는 방향으로 배치되는 것을, 역방향은 우유갑의 꼭지가 아래로 향하는 방향으로 배치되는 것을 뜻한다.</p> <ul> <li>$1$층은 우유갑을 원하는 개수만큼 정방향이 되도록 일렬로 바닥 위에 세운다.</li> <li>$k \ge 1$에 대해, $k$층까지 쌓여 있을 때 $k+1$층을 올리는 방법은 다음 두 경우뿐이다. <ul> <li>$k$층의 우유갑이 정방향이면, $k+1$층의 우유갑은 역방향으로 올린다. 이때 역방향 우유갑의 머리는 아래층의 우유갑의 머리와 완전히 맞닿아야 하고 꼭지는 바로 아래층의 두 몸통 사이 틈으로 들어가게 한다. 이 과정에서 아래층보다 우유갑의 개수가 하나 적어진다.</li> <li>$k$층의 우유갑이 역방향이면, $k+1$층의 우유갑은 바로 위에 정방향으로 올린다.</li> </ul> </li> </ul> <p>우유탑을 쌓을 때, $1$층에 공간이 부족하여 우유갑을 놓지 못해 $N$층 우유탑을 만들지 못하는 경우는 존재하지 않는다.</p> <p style="text-align: center;"><img alt="" src="https://upload.acmicpc.net/b2bdeff4-1df4-418d-9003-4b22d0ebe567/-/preview/" style="width: 40%; margin-left: auto; margin-right: auto; display: inline-block;"><img alt="" src="https://upload.acmicpc.net/7d7591c6-3f1a-456a-b552-0c7918f5c5b1/-/preview/" style="width: 40%; margin-left: auto; margin-right: auto; display: inline-block;"></p> <p style="text-align: center;">위 그림은 각각 우유갑을 가장 적게 이용하여 $1$층부터 $4$층까지의 우유탑을 쌓은 예시이다. 왼쪽 우유탑을 도식화하여 오른쪽 그림으로 나타낼 수 있다.</p> <p>$N$층 우유탑의 전체 높이를 구해보자.</p> ## 입력 <p>첫 번째 줄에 정수 $H_1$, $H_2$, $H_3$가 공백으로 구분되어 주어진다.</p> <p>두 번째 줄에 정수 $N$이 주어진다.</p> ## 출력 <p>첫 번째 줄에 $N$층 우유탑의 전체 높이를 출력한다.</p> ## 풀이 간단한 사칙연산으로 해결할 수 있습니다. ``` c++ #include<bits/stdc++.h> using namespace std; int main() { ios::sync_with_stdio(0); cin.tie(0); long long h1, h2, h3, n; cin >> h1 >> h2 >> h3 >> n; cout << (n%2 ? h1 : 0) + ((n-1)/2+1)*h2 + n*h3; } ```