Algorithm - 탑

BLAKE KIM·2020년 7월 26일
0

프로그래머스 코딩테스트 연습 Level2 Python

내 답안

def solution(heights):
    answer = []
    for i, v in enumerate(heights): 
        while i != 0:
            i -= 1
            if heights[i] > v:
                answer.append(i+1)
                break
        else:
            answer.append(0)
    return answer

풀이과정

우선 가장 많이 한 고민은 과연 heights listindex 0부터 불러 올 지 아니면 끝에서부터 불러올지에 대한 고민이었다. 문제에서 레이저 신호를 왼쪽으로 즉 앞 쪽의 값으로 보내기에 역순으로 불러오면 편할 것 같았기 때문이다. 그러나 코드 구현 중 몇 번째에 위치한 탑인지 즉 index가 필요하다고 판단하여 원래의 순서대로 부르기를 택했다.

그 후에 앞 쪽 index의 값과 비교하기 위해 index가 0인 경우를 제외하고 index가 0이 될 때까지 차례로 비교하기 위해 while문을 작성했고 그 조건을 0이 아닌 조건으로 작성했다. index가 담긴 i가 0이 되면 자연스럽게 빠져나올 수 있다. 또한 중간에 신호를 쏜 탑보다 값이 큰 탑을 찾지 못하고 while문을 빠져나오는 경우와 처음 index가 0인 경우에 0을 추가하는 코드를 쓰기 위해 즉 while문이 끝나고 나서 실행할 코드를 while - else를 이용해서 작성했다.

다른 사람의 풀이

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

for문에서 range를 이용해서 index 값을 끝에서부터 받아오도록 하고 각각의 index보다 하나 작은 값부터 시작해서, 즉 신호 쏜 탑으로부터 가까운 곳부터 수를 비교해서 큰 값이 있다면 해당 index에 자신보다 큰 탑의 위치를 입력한다. 찾지 못하는 경우를 굳이 따로 구현하지 않은 이유는 처음에 answer를 생성할 때 각각의 값에 0을 넣고 시작했기 때문이다.

profile
BackEnd

0개의 댓글