반응형

물고기가 위 또는 아래 방향으로 헤엄치고 있는데, 

물고기의 사이즈에 따라서 크기가 큰 물고기가 작은 물고기와 충돌할때,

잡아먹게 되면!! 총 몇마리의 물고기가 남는지를 물어보는 문제다

 

# 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
    
    if len(A) == 1:
        return 1
    
    arr = []
    
    for i in range(len(A)):
        arr.append((A[i],B[i]))
        
    arr_ = []
    arr_.append(arr[0])

    for i in range(1,len(arr)):
        
        # 충돌하면
        while(True):
            if arr[i][1] == 0 and arr_[len(arr_)-1][1] == 1:
                # 기존 물고기가 더 쎄면
                if arr[i][0] < arr_[len(arr_)-1][0]:
                    break
                # 새로운 물고기가 더 쎄면
                else:
                    del arr_[len(arr_)-1]
            else:
                arr_.append(arr[i])
                break
            
    return len(arr_)
            
    pass

 

처음으로 시도했을때, 정확도는 --> 75%가 나왔다ㅠㅠㅠ

어디서 에러가 발생했는지 확인해보니

모두 한방향으로 가고, 하나의 물고기가 다른 방향으로 갈 때,

Runtime Error가 발생하고 있었다.

 

 

# 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
    
    if len(A) == 1:
        return 1
    
    arr = []
    
    for i in range(len(A)):
        arr.append((A[i],B[i]))
        
    arr_ = []
    arr_.append(arr[0])

    for i in range(1,len(arr)):
        
        # 충돌하면
        while(True):
            if arr[i][1] == 0 and arr_[len(arr_)-1][1] == 1:
                # 기존 물고기가 더 쎄면
                if arr[i][0] < arr_[len(arr_)-1][0]:
                    break
                # 새로운 물고기가 더 쎄면
                else:
                    del arr_[len(arr_)-1]
                    if len(arr_) == 0:
                        arr_.append(arr[i])
                        break
            else:
                arr_.append(arr[i])
                break
            
    return len(arr_)
            
    pass

 

 

생각해보니 del 이라는 예약어를 사용할 때,

더이상 기존에 물고기가 존재하지 않을 수도 있는 예외처리를 진행해주어야 했다.

 

 

그래서 

del 이라는 코드 아래에 아래와 같이 조건문을 넣어주어 해결하였다.

 

if len(arr_) == 0:
	arr_.append(arr[i])
    	break

 

반복문 하나만 사용하여 문제를 풀었다.

 

시간 복잡도: O(N) --> 100%의 정답률

 

 

관련 유튜브 강의도 있습니다~~!

https://www.youtube.com/watch?v=pPk-qrvBNO8

 

저의 강의입니다ㅋㅋㅋ

반응형

'Codility' 카테고리의 다른 글

Codility - StoneWall  (0) 2020.05.09
Codility - Nesting 문제풀이  (1) 2020.04.28
Codility - Brackets  (0) 2020.04.27
Codility - Triangle  (0) 2020.04.25
Codility - NumberOfDiscIntersections  (0) 2020.04.24

+ Recent posts