boj 11497 [정렬, 그리디]

돌멩e·2022년 7월 6일
0

알고리즘 뿌수기

목록 보기
5/17
post-thumbnail

boj 11497

boj 11497

📍 Idea Logic

  1. 원형으로 이루어지기 때문에 리스트의 양쪽 끝부터 차례대로 가장 작은 수부터 채운다.
  2. 가장 작은 수를 인덱스의 첫 번째, 2번째 작은 수를 인덱스의 가장 끝, 3번째 작은 수를 인덱스의 두 번째... 이 순서로 넣는다.
  3. 인덱스 간의 차이를 비교해가며 max value를 찾아 print 한다.

❗️ ERROR Point

for j in range(1,n,-2):
	arr.append(l[i])
  • 1부터 n까지의 인덱스를 2 간격인 값의 역순을 arr 리스트에 넣고 싶었으나, 이는 실행되지 않는 코드이다.

📌 New Arrival

1. 절대값 함수 - abs()

  • 파이썬 내장 함수
  • 음수를 넣어도 양수로 return

2. python & stack

  • 파이썬의 리스트는 기본적으로 스택 형태 (LIFO)
  • pop()은 리스트의 가장 오른쪽에 있는 요소 반환
  • stack의 원소가 다 없어질 때까지 pop() 실행
while stack이름:
        stack이름.pop()

🔑 Solution

import sys

t = int(sys.stdin.readline())
for _ in range(t):
    n = int(sys.stdin.readline())
    l = list(map(int, sys.stdin.readline().split()))

# 절대값 함수 : abs() - 파이썬 내장 함수
# 가장 작은 수부터 양쪽 끝에 배치해서 점점 안으로 큰 수 배치

# 오름차순 정렬
# range(시작,끝,간격)
    l.sort()
    arr = []
    tmp = []

    for i in range(0,n,2):
        arr.append(l[i])
    
    for j in range(1,n,2):
        tmp.append(l[j])
    
    # 파이썬의 리스트는 기본적으로 스택 형태
    # stack의 원소가 다 없어질 때까지 pop() 실행
    # while stack이름:
        # stack이름.pop()
    
    while tmp:
        # pop()은 리스트의 오른쪽 요소를 반환
        arr.append(tmp.pop())
    
    max_val = 0
    for z in range(n-1):
        max_val = max(max_val, abs(arr[z]-arr[z+1]))

    print(max_val)
profile
돌이 되고 싶어요

0개의 댓글

관련 채용 정보