Notice
Recent Posts
Recent Comments
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 카프카
- 스프링
- 클라우드
- aws
- Spring
- 백준
- 월미도
- 프로그래밍문제
- VPC
- 오일러프로젝트
- 쿠버네티스
- Elasticsearch
- 알고리즘
- springboot
- 스프링부트
- Apache Kafka
- gcp
- Docker
- 스프링 부트
- Spring Data JPA
- 로드밸런서
- 코드업
- JPA
- DFS
- 자료구조
- 클라우드 컴퓨팅
- Kafka
- Spring Boot
- 백트래킹
- 인천여행
Archives
- Today
- Total
GW LABS
[Backjoon] 통나무 건너뛰기 본문
백준 11497번 통나무 건너뛰기는 그리디 문제로 정렬을 해서 적절한 순서로 통나무들을 배열시키는 문제이다. 기본 아이디어는 우선 통나무들을 정렬시키고 큰 통나무들을 가운데에, 나머지 통나무들을 배열 양쪽 끝쪽으로 배열시키면 되는 것이다. 그 후 가운데서부터 왼쪽 끝, 오른쪽 끝으로 차이를 계산해서 가장 큰 값을 리턴하면 된다.
처음 접근방법은 가운데 값에서 한 개의 차이값들만 계산해서 [1, 2, 3, 4, 5, 100, 101, 102, 103, 104] 같은 예외에서 실패했다. 다른 그리디 문제들을 통해 예외를 생각해보는 연습을 계속해야겠다.
import sys
cases = int(input())
for _ in range(cases):
length = int(input())
lumbers = list(map(int, input().split(" ")))
lumbers.sort()
container = [0 for _ in range(length)]
idx_container, idx_lumber = 0, 0
while idx_lumber + 1 < length:
container[idx_container], container[length-idx_container-1] = lumbers[idx_lumber], lumbers[idx_lumber+1]
idx_container += 1
idx_lumber += 2
if length % 2 == 1:
container[length//2] = lumbers[length-1]
diff = 0
for idx in range(length//2, 0, -1):
if abs(container[idx] - container[idx-1]) > diff:
diff = abs(container[idx] - container[idx-1])
for idx in range(length//2, length-1):
if abs(container[idx] - container[idx+1]) > diff:
diff = abs(container[idx] - container[idx+1])
print(diff)
'Algorithm & DataStructure' 카테고리의 다른 글
[Backjoon] 트럭 주차 (0) | 2021.01.02 |
---|---|
[Backjoon] 회전하는 큐 (0) | 2020.12.18 |
[Backjoon] 톱니바퀴 (0) | 2020.12.10 |
[Backjoon] 저울 (0) | 2020.12.07 |
[Backjoon] 영역 구하기 (0) | 2020.11.30 |
Comments