Skip to content

Commit

Permalink
[Gold III] Title: 가희와 탑, Time: 136 ms, Memory: 119476 KB -BaekjoonHub
Browse files Browse the repository at this point in the history
  • Loading branch information
HyunSoo730 committed Jul 11, 2024
1 parent 08e7ca1 commit 832c094
Show file tree
Hide file tree
Showing 2 changed files with 104 additions and 0 deletions.
66 changes: 66 additions & 0 deletions 백준/Gold/24337. 가희와 탑/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
# [Gold III] 가희와 탑 - 24337

[문제 링크](https://www.acmicpc.net/problem/24337)

### 성능 요약

메모리: 119476 KB, 시간: 136 ms

### 분류

해 구성하기, 그리디 알고리즘

### 제출 일자

2024년 7월 11일 12:14:41

### 문제 설명

<p>일직선으로 다양한 높이의 건물들이 <em>N</em>개 존재합니다. 가희는 건물들의 왼쪽에, 단비는 건물들의 오른쪽에 있습니다. 일직선 상에 가희와 단비, 건물들은 아래와 같은 순서로 배치되어 있습니다.</p>

<ul>
<li>가희의 오른쪽에는 1번 건물이 있습니다.</li>
<li><em>x</em>가 1이상 <em>N-1</em>이하의 정수일 때, x번 건물의 오른쪽에는 <em>x+1</em>번 건물이 있습니다.</li>
<li><em>N</em>번 건물의 오른쪽에는 단비가 있습니다.</li>
</ul>

<p>가희와 단비가 볼 수 있는 건물은 아래와 같습니다.</p>

<ul>
<li>가희는 1번 건물을 볼 수 있습니다.</li>
<li><em>k</em>번 건물보다 왼쪽에 있는 건물들이 <strong>모두</strong> <em>k</em>번 건물보다 높이가 낮다면, 가희는 <em>k</em>번 건물을 볼 수 있습니다.</li>
<li>단비는 <em>N</em>번 건물을 볼 수 있습니다.</li>
<li><em>k</em>번 건물보다 오른쪽에 있는 건물들이 <strong>모두</strong> <em>k</em>번 건물보다 높이가 낮다면, 단비는 <em>k</em>번 건물을 볼 수 있습니다.</li>
</ul>

<p>예를 들어, <em>N</em>이 3이고, 1번 건물의 높이가 1, 2번 건물의 높이가 3, 3번 건물의 높이가 2라고 하겠습니다.</p>

<p style="text-align: center;"><img alt="" src="https://upload.acmicpc.net/5a6e0313-a6d1-43b4-9997-926cae9b0905/-/preview/"></p>

<p style="text-align: center;"><strong>[그림 1] 가희와 단비, 그리고 건물들의 배치</strong></p>

<p>가희가 볼 수 있는 건물과 단비가 볼 수 있는 건물의 수는 각각 2개입니다. 이를 각각 노란색, 연보라색으로 표시하겠습니다.</p>

<p style="text-align: center;"><img alt="" src="https://upload.acmicpc.net/f0583b2b-3237-498e-95cf-af714b52cd15/-/preview/"> <img alt="" src="https://upload.acmicpc.net/777defd0-84a6-40ae-a24f-89154fa6ab8c/-/preview/"></p>

<p style="text-align: center;"><strong>[좌] 가희가 볼 수 있는 건물 [우] 단비가 볼 수 있는 건물</strong></p>

<p>가희가 3번 건물을 볼 수 없는 이유는 3번 건물 왼쪽에 있는 2번 건물의 높이가 3번 건물보다 높기 때문입니다. 그리고, 단비가 1번 건물을 볼 수 없는 이유는 1번 건물보다 오른쪽에 있는 2번 건물과 3번 건물이 1번 건물보다 높기 때문입니다.</p>

<p>가희와 단비 사이에 있는 건물의 개수 <em>N</em>과 가희가 볼 수 있는 건물의 개수 <em>a</em>, 단비가 볼 수 있는 건물의 개수 <em>b</em>가 주어집니다. <strong>사전 순으로 가장 앞서는</strong> <em>N</em>개의 건물 높이 정보를 출력해 주세요.</p>

### 입력

<p>첫째 줄에 건물의 개수 <em>N</em>, 가희가 볼 수 있는 건물의 개수 <em>a</em>, 단비가 볼 수 있는 건물의 개수 <em>b</em>가 공백으로 구분해서 주어집니다.</p>

### 출력

<p>문제의 조건에 맞는 건물들의 높이 정보가 1개 이상 존재하는 경우 <em>N</em>개의 건물 높이 정보 중 <strong>사전순으로 가장 앞선 것</strong>을 출력해 주세요. 출력 형식은 다음을 만족해야 합니다.</p>

<ul>
<li>1번 건물, ... , <em>N</em>번 건물의 높이를 <strong>공백으로 구분해서 출력</strong>해 주세요. <strong>출력하는 수들이 모두 다를 필요는 없습니다.</strong></li>
<li>높이는 <strong>1보다 크거나 같은 정수</strong>여야 합니다.</li>
</ul>

<p>문제의 조건에 맞는 건물들의 높이 정보가 존재하지 않으면 첫 줄에 -1을 출력해 주세요.</p>

38 changes: 38 additions & 0 deletions 백준/Gold/24337. 가희와 탑/가희와 탑.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
import sys
from collections import deque

# 일직선. 다양한 높이의 건물 n개 존재.
# 가희는 건물의 왼쪽에, 단비는 건물의 오른쪽에
# 가희, 1번 건물, 2번 건물 ... n번, 단비

# 현재 위치의 건물보다 왼쪽에 있는 건물들이 모두 현재 위치 건물보다 높이 작으면
# 가희는 현재 위치 건물 볼 수 있음

# 현재 위치 건물보다 오른쪽에 있는 건물들이 모두 현재 위치보다 높이가 작으면
# 단비는 현재 위치 건물 볼 수 있음

# 두 사람이 볼 수 있는 건물의 개수가 주어질 때,
# N개의 건물 높이 중 사전 순으로 가장 앞선 것 ??


n,a,b = map(int, input().split()) # 건물 개수, 가희가 볼 수 있는 a개, 단비가 볼 수 있는 b개

# 1~(a-1) ~ max(a,b) ~ (b-1) ~ 1


res = deque()

for i in range(1,a):
res.append(i)
res.append(max(a,b))
for i in range(b-1, 0, -1):
res.append(i)

if len(res) > n:
print(-1)
else:
temp = res.popleft() # 가장 첫번째 꺼 일단 꺼낸 다음에
for _ in range(n - len(res) - 1): # 일단 한개 뺏으니까 그거만큼 반영
res.appendleft(1)
res.appendleft(temp)
print(*res)

0 comments on commit 832c094

Please sign in to comment.