문제 설명
빌딩들이 길게 늘어선 거리에서 각 빌딩의 높이가 주어질 때, 건물을 복원하기 위한 적절한 순서를 찾는 문제입니다. 각 빌딩은 높이의 배열로 주어지고, 그 배열을 기반으로 해당 빌딩들이 세워진 순서를 파악해야 합니다.
예를 들어, 빌딩의 높이가 [3, 1, 4, 1, 5]라면, 가장 높은 빌딩부터 차례로 세워져야 하는 순서는 다음과 같습니다.
- 빌딩 1: 높이 5
- 빌딩 2: 높이 4
- 빌딩 3: 높이 3
- 빌딩 4: 높이 1
- 빌딩 5: 높이 1
입력
정수 배열 heights
가 주어집니다. 각 원소는 빌딩의 높이를 나타냅니다.
출력
세워야 할 빌딩의 순서를 원소의 인덱스 리스트 형식으로 출력해야 합니다.
예제
입력: heights = [3, 1, 4, 1, 5] 출력: [4, 3, 0, 1, 2]
문제 풀이 과정
이 문제를 해결하기 위해서는 높이 정보를 기반으로 빌딩의 인덱스를 정렬해야 합니다. 아래는 풀어내는 과정의 단계입니다.
1단계: 입력받기
우선 주어진 빌딩의 높이를 입력으로 받아야 합니다. 이를 위해 heights
배열을 선언하거나 함수를 통해 입력을 받을 수 있습니다.
2단계: 높이와 인덱스 쌍 만들기
각 빌딩의 높이와 인덱스를 쌍으로 만들어서 리스트로 만듭니다. 파이썬에서는 enumerate
함수를 사용하여 간편하게 인덱스를 포함한 리스트를 생성할 수 있습니다.
building_pairs = list(enumerate(heights))
3단계: 정렬하기
이제 높이를 기준으로 빌딩 목록을 정렬해야 합니다. 리스트의 sorted
함수를 사용하여 높이에 따라 내림차순으로 정렬할 수 있습니다. 이 때, key
인자로 높이를 지정하여 정렬할 수 있습니다.
sorted_buildings = sorted(building_pairs, key=lambda x: x[1], reverse=True)
4단계: 결과 추출하기
정렬된 리스트에서 인덱스만 추출하여 결과 리스트를 만듭니다. 리스트 컴프리헨션을 통해 쉽게 작성할 수 있습니다.
result = [index for index, height in sorted_buildings]
5단계: 결과 출력하기
이제 최종적으로 빌딩의 순서를 출력하면 됩니다. 관련된 모든 코드를 통합하여 함수 형태로 제공할 수 있습니다.
최종 코드
def building_order(heights):
building_pairs = list(enumerate(heights))
sorted_buildings = sorted(building_pairs, key=lambda x: x[1], reverse=True)
result = [index for index, height in sorted_buildings]
return result
# 예제 사용
heights = [3, 1, 4, 1, 5]
print(building_order(heights))
결과 확인
위의 코드를 실행하면 [4, 3, 0, 1, 2]라는 결과가 출력되며, 이는 주어진 빌딩 높이에 따른 올바른 순서를 나타냅니다.
결과 분석
배열에 있는 높이에 따라 인덱스가 짝짓기 되어 정렬된 결과를 도출하였으며, 이로써 빌딩의 구축 순서를 효과적으로 구할 수 있었습니다.