티스토리 뷰

알고리즘

[프로그래머스] Stack/Queue 문제 Top

도라지보다더덕 2020. 2. 4. 11:25

3월 14일 코딩테스트를 준비하기 위해 남은 한달동안 파이썬을 이용해 알고리즘을 풀려고 합니다.
알고리즘과 파이썬 기초가 많이 부족하니 많이 지적해주시면 감사하겠습니다~~ :)

 

프로그래머스 문제풀러 가기

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

내 풀이 :

def solution(heights):
    answer = []
    for i in range(len(heights)-1,-1,-1):
        head = i - 1

        while heights[head] <= heights[i] and head >= 0:
            head = head - 1
        if head == -1:
            answer.append(0)
        else:            
            answer.append(head+1)

    answer.reverse()
    return answer

전달받은 heights를 for을 통해 뒤에서부터 읽어와 for문 내부 while문 통해 크기 비교 후 답을 배열에 순서대로 추가하도록 했습니다.
마지막에 list 순서를 거꾸로 해주는 answer.reverse()로 정답을 return 하도록 했습니다.

 

for문에 list자체를 거꾸로 사용하기 위해 for i in heights.reverse()로 했으나 실패하여 range로 index를 거꾸로 사용하는 방법을 사용했습니다. 알고보니 list.reverse()는 return값이 존재하지 않고 배열 자체를 역순으로 바꿔주는 list 타입의 함수였고 실제 배열을 역순으로하여 사용하기 위해서는 reversed 내장함수로 list를 역순으로 반환하여 for i in reversed(list) 형태로 사용해야 합니다.

 


 

참고 풀이 :

def solution(heights):
    answer = [0] * len(heights)

    for i in range(len(heights)-1,0,-1):
        for j in range(i-1,-1,-1):
            if(heights[i] < heights[j]):
                answer[i] = j + 1
                break

    return answer

answer의 크기를 맞춰놓은 뒤 이중 for문을 통해 index를 바로 넣은 깔끔한 코드입니다. reverse()를 사용하지않고 위 코드보다 더 깔끔한 코드같습니다.

 

정리

  1. range(start, end, step) : step을 통해 역순으로 숫자를 생성할 수 있다. end는 포함 X
  2. reverse vs reversed : reverse는 반환없이 list를 역순으로 만들어주는 list타입 함수, reveresed는 역순 list를 반환해주는 내장 함수

 

list타입 함수 정리

 

1. list.append(x) : list에 x 요소 추가

2. list.sort() : list 정렬 default 오름차순, 내림차순은 list.sort(reverse=True) 

3. list.reverse() : list를 역순으로 정리, sort는 크기에 따라 정렬하지만 reverse()는 list 그대로 역순으로 정렬한다. sort와 list는 반환값이 없고 list를 반환받으려면 sorted(), reversed() 

4. list.index(x) : x에 해당하는 index 반환

5. list.insert(i,x) : a index에 b 삽입

6. list.remove(x) : 첫번째로 나오는 x 삭제

7. list.pop() : 맨 마지막 요소 반환 후 삭제, list.pop(i) : x 인덱스 반환 후 삭제

8. list.count(x) : x와 같은 요소 개수 반환

9. list.extend(list2) : 두 list를 더함

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/10   »
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 31
글 보관함