프로그래머스 주식가격 / 예상대진표(Python)

박노정·2021년 6월 20일
0

알린이의 알고리즘

목록 보기
8/15
post-custom-banner

주식가격

https://programmers.co.kr/learn/courses/30/lessons/42584

초 단위로 기록된 주식가격이 담긴 배열 prices가 매개변수로 주어질 때, 가격이 떨어지지 않은 기간은 몇 초인지를 return 하도록 solution 함수를 완성하세요.

반복문을 두번돌리면서 가격이 안떨어지면 계속해서 카운트를 세줬댜ㅏ.

분명 스택/큐 문제인데 스택이나 큐를 쓰는거보다 이게 더 깔끔해서 이렇게 풀었다.
스택큐로 풀어도 반복문을 두번 쓰면서 카운트를 세는것도 똑같기 때문이다.

def solution(prices):
    answer = []
    for i in range(len(prices)-1):
        cnt = 1
        for j in range(i+1, len(prices)):
            if prices[i] > prices[j] or j == len(prices)-1:
                break
            cnt += 1
        answer.append(cnt)
    answer.append(0)
    return answer

예상 대진표

https://programmers.co.kr/learn/courses/30/lessons/12985

△△ 게임대회가 개최되었습니다. 이 대회는 N명이 참가하고, 토너먼트 형식으로 진행됩니다. N명의 참가자는 각각 1부터 N번을 차례대로 배정받습니다. 그리고, 1번↔2번, 3번↔4번, ... , N-1번↔N번의 참가자끼리 게임을 진행합니다. 각 게임에서 이긴 사람은 다음 라운드에 진출할 수 있습니다. 이때, 다음 라운드에 진출할 참가자의 번호는 다시 1번부터 N/2번을 차례대로 배정받습니다. 만약 1번↔2번 끼리 겨루는 게임에서 2번이 승리했다면 다음 라운드에서 1번을 부여받고, 3번↔4번에서 겨루는 게임에서 3번이 승리했다면 다음 라운드에서 2번을 부여받게 됩니다. 게임은 최종 한 명이 남을 때까지 진행됩니다.

내풀이

나는 직관적으로 생각나는 코드를 적어서 풀었다.
A와 B 모두 만날때까지 이긴다고 가정했으니까 둘의 차이가 1이면 되겠네! 했다.
하지만 4와 5는 1차이 나지만 같은 대진이 아니다. 3과 4여야지 같은 대진이다.
공통점을 찾다보니 각각 1을 더해주고 2로 나눈 몫이 같은걸 알수있었다. 그냥 2로 나누면 몫이 다르다 ㅠㅜ

아무튼 그 규칙을 이용해서 문제를 풀었다.

def solution(n,a,b):
    answer = 0

    flag = True
    while flag:
        answer += 1
        if (a+1)//2 == (b+1)//2:
            flag = False
        a = (a+1)//2
        b = (b+1)//2

    return answer

다른사람 풀이

나는 이런 풀이를 굉장히 좋아한다.
코드가 정말 짧고 조건한줄로 모든 문제를 다 푼 느낌이랄까..!

이제 이런 반복적인 나눗셈이 나올 때는 이런 방법을 이용해서 풀어보는 것도 시도해봐야겠다.

def solution(n,a,b):
    i = 0
    while (a-1)//(2**i) != (b-1)//(2**i):
        i += 1
    return i
profile
성장스택 쌓고있는 개발자🏋
post-custom-banner

0개의 댓글