Notice
Recent Posts
Recent Comments
Link
나의 개발일지
[백준] 24337 가희와 탑 [Python, 파이썬] 본문
- 문제 : https://www.acmicpc.net/problem/24337
- 🔑 a, b를 만족하는 건물 먼저 세우기
- n, a, b = 10, 6, 3 일 때
- 1 ~ a-1까지 건물을 먼저 짓는다.
- [1, 2, 3, 4, 5]
- 그다음 가장 높은 건물을 짓는다.
- max(a, b) = 6
- [1, 2, 3, 4, 5, 6]
- b-1 ~ 1까지 건물을 마저 짓는다.
- [1, 2, 3, 4, 5, 6, 2, 1]
- 10개를 세워야 하는데 8개의 건물이 세워져 있다.
- 건물 2개를 현재 만족하고 있는 조건을 해치지 않고 추가해야 한다.
- 출력되는 숫자를 가장 작게 만들기 위해서는 1을 왼쪽 편에 추가해야 한다.
- 하지만 가장 왼쪽에 1을 추가하는 것이 아닌 1번 인덱스에 추가해야 한다.
- n, a, b = 10, 1, 9 일 때
- [9, 8, 7, 6, 5, 4, 3, 2, 1] 이렇게 세워진 건물에 1짜리 건물을 하나 더 추가해야 한다.
- 이때 왼쪽에서는 1개의 건물을 봐야 하기 때문에 [1, 9, 8, 7, 6, 5, 4, 3, 2, 1] 이렇게 세우면 조건에 어긋난다.
- 그래서 1번 인덱스에 건물을 세우면 [9, 1, 8, 7, 6, 5, 4, 3, 2, 1] 이렇게 조건을 만족하고 가장 작은 숫자를 만들 수 있다.
- 다시 건물을 마저 지어보면 1번 인덱스에 1짜리 건물을 2개를 더 세운다.
- 한 개 추가 = [1, 1, 2, 3, 4, 5, 6, 2, 1]
- 두 개 추가 = [1, 1, 1, 2, 3, 4, 5, 6, 2, 1]
- 왼쪽에서 6개 오른쪽에서 3개가 보이는 건물 중 가장 작은 숫자를 만들었다.
- 건물을 insert로 1번 인덱스에 계속 추가해도 되지만 바로 출력하는 방법이 훨씬 빠르다.
- 1 ~ a-1까지 건물을 먼저 짓는다.
- n, a, b = 10, 6, 3 일 때
n, a, b = map(int, input().split())
answer = []
max_building = max(a, b) # 가장 높은 건물 높이
for i in range(1, a): # 1 ~ a-1 까지 건물 세우기
answer.append(i)
answer.append(max_building) # 가장 높은 건물 세우기
for i in range(b-1, 0, -1): # b-1 ~ 1 까지 건물 세우기
answer.append(i)
if len(answer) > n: # 세운 건물이 n보다 많으면
print(-1)
else:
print(answer[0], end=" ") # 제일 왼쪽 건물 하나 먼저 출력
x = n - len(answer) # 더 세워야하는 건물 개수
for i in range(x): # 건물 개수 만족할 때 까지 1 출력
print(1, end=" ")
for i in range(1, len(answer)): # 다음 건물 계속 출력
print(answer[i], end=" ")
'백준' 카테고리의 다른 글
[백준] 21939 문제 추천 시스템 Version1 [Python, 파이썬] (0) | 2023.12.14 |
---|---|
[백준] 20440 🎵니가 싫어 싫어 너무 싫어 싫어 오지 마 내게 찝쩍대지마🎵 - 1 [Python, 파이썬] (1) | 2023.12.11 |
[백준] 1436 영화감독 숌 [Python, 파이썬] (1) | 2023.12.03 |
[백준] 17299 오등큰수 [Python, 파이썬] (0) | 2023.12.01 |
[백준] 5549 행성 탐사 [Python, 파이썬] (0) | 2023.11.30 |
Comments