ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [python] Codility Lesson 7-2. Fish
    공부/알고리즘 2021. 9. 3. 01:53

    영어로된 문제가 난해?해서 문제해석에 시간이 걸렸다.

     

    간략히 문제를 설명하면,

     

    각각 배열의 인덱스는 숫자가 작을수록 그 위치가 상류임을 뜻하고, list A는 물고기 크기를, B는 물고기의 움직이는 방향을 나타낸다.

    또한, 크기가 큰 물고기는 반대방향에서 다가오는 물고기를 잡아 먹는다, 물고기들의 이동속도는 같다.

    이러할 때, 마지막에 살아남는 물고기의 수를 구하는 문제이다.

     

    1. 각 리스트의 길이만큼 for문을 돌리며 내려가는 물고기를 list에 스택구조로 물고기 크기를 쌓아 올리자.

     

    2. 내려가는 물고기 스택이 비어 있는 상태에서 올라가는 물고기를 만나면 liveUpFish += 1

     

    3. 내려가는 물고기 스택이 비어 있지 않은 상태에서 올라가는 물고기를 만나면,  스택길이만큼 for문을 돌려 물고기 크기가 올라가는 물고기 크기보다 크면, break 크지 않다면 스택 pop() 그리고 for문이 끝났을때 스택이 비어 있다면 liveUpFish += 1

     

    4. 최종으로 내려가는 물고기 스택의 크기 + liveUPFish로 답을 구하자.

    # you can write to stdout for debugging purposes, e.g.
    # print("this is a debug message")
    
    def solution(A, B):
        # write your code in Python 3.6
        fishDownStack = list()
        liveUpFish = 0
        for i in range(len(A)):
            if B[i] == 1:
                fishDownStack.append(A[i])
            else:
                if len(fishDownStack) == 0:
                    liveUpFish += 1
                else:
                    for j in range(len(fishDownStack)-1,-1,-1):
                        if fishDownStack[j] > A[i]:
                            break
                        else:
                            fishDownStack.pop(-1)
                    if len(fishDownStack) == 0:
                        liveUpFish += 1
        return len(fishDownStack) + liveUpFish

     

    for 문안에 for를 집어넣어 참으로 찝찝하다...

    728x90

    댓글

Designed by Tistory.