TIL 20200113

Jean Deluge·2021년 1월 13일
0

TIL

목록 보기
4/19

1. ES11

  • optional chaining ( A?.B )
    : A 가 null 이나 undefined 일 경우, 중지 후 undfined 반환

  • nullish coalescing operator ( A ?? B)
    : A가 null 혹은 undefined 일 경우 B를 반환, 아닌 경우 A를 반환

2. 프로그래머스 주식가격

  • 오늘로 진짜 끝.
  • 시간을 저장한 스택 안에 뭐가 들었는지 제대로 파악을 못했었다.
    시간 스택에 남아있던 것은 유지되고 있을 동안의 시간이 입력되고 있었다.
    그리고 처음 while 문에 answer에 줄었던 순간의 시간이 저장되어있었다는 구조를 파악을 못하고, while문에서 answer[i] = i - top 을 넣는 실수를했기때문에 계속 실패했었다.
def solution(prices):
    answer = [0] * len(prices)
    
    pricesData = prices #데이터의 보존을 위해서
    # LILO 구조

    time = [] #시간을 저장할것
    
    for i in range(len(prices)):
        #i는 현재가격
        #스택에 저장된 마지막 시간대의 가격보다 현재가격 더 작으면,
        # 시간에 저장해준다.
        #   i=4
        while time and prices[time[-1]] > prices[i]:
            top = time.pop() # 유지된 마지막 시간을 꺼냄 
            answer[top] = i - top #유지시간을 저장 3초의 가격이 줄어들었기때문에 3초때에 저장해준다. 그러니까 price[2]는 1초 안에 떨어졌으므로, answer[2] = 3 - 2 = 1 
        #time 이 존재하지 않거나, 현재가격이 계속 더 크다면
        # []
        time.append(i)
        
    # time 안에는 예시에 의해서, 현재 time =[0, 1, 3, 4] 가 들어가있다. answer=[0,0,1,0,0] 인 상태. //그러니까 줄어든 때만 줄어들기까지의 시간 들어가게됨.
    
    while time:
        top = time.pop()
        answer[top] = len(prices)-1 - top
        #그렇기때문에 time에는 가격이 올랐거나 가격이 같을때만 유지시간이 들어가게됨.

    return answer
        
        
            
            
profile
node.js , rudyonrails개발자

0개의 댓글