본문 바로가기

Algorithm/프로그래머스

[Python] [코딩 기초 트레이닝] / 배열 만들기 4

[Q]

1. 정수 배열 [arr] 로 [stk] 생성

2. i = 0

3. i가 arr의 길이보다 작으면 다음 작업을 반복

  - 만약 stk가 빈 배열이라면 arr[i]를 stk에 추가하고 i에 1을 더합니다.
  - stk에 원소가 있고, stk의 마지막 원소가 arr[i]보다 작으면 arr[i]를 stk의 뒤에 추가하고 i에 1을 더합니다.
  - stk에 원소가 있는데 stk의 마지막 원소가 arr[i]보다 크거나 같으면 stk의 마지막 원소를 stk에서 제거합니다.

def solution(arr):
    stk = []
    return stk

 

 

- while i < len(arr)

- if not stk :

- stk[-1] = arr[i]

- if stk[-1] < arr[i] :

- stk[-1] =+ arr[i] , i = +1

- if stk[-1] >= arr[i] :

- stk = stk[:-1]

 

 

[A] (내가 쓴 답)

def solution(arr):

    stk = []
    i = 0
      
    while i < len(arr) :
        
        if len(stk) == 0 :
            stk.append(arr[i])
            i =+ 1
        elif len(stk) > 0 and stk[-1] < arr[i] :
            stk.append(arr[i])
            i =+ 1 
        elif len(stk) > 0 and stk[-1] >= arr[i] :
            stk = stk[:-1]
                

    return stk

-> 시간 초과

- 봤더니 += 연산자 잘못 씀. -> i =+ 1 -> i += 1 변경했더니 통과

 

(수정한 답)

def solution(arr):

    stk = []
    i = 0
      
    while i < len(arr) :
        
        if len(stk) == 0 :
            stk.append(arr[i])
            i += 1
        elif len(stk) > 0 and stk[-1] < arr[i] :
            stk.append(arr[i])
            i += 1 
        elif len(stk) > 0 and stk[-1] >= arr[i] :
            stk = stk[:-1]
                

    return stk

 

 

[A] 다른 답들

def solution(arr):
    stk = []
    for i in range(len(arr)):
        while stk and stk[-1] >= arr[i]:
            stk.pop()
        stk.append(arr[i])
    return stk