알고리즘/백준 문제풀이

[삼성SW역량][Python/BOJ] 백준 20055 컨베이어 벨트 위의 로봇(구현)

개발자 덕구🐾 2022. 7. 16. 21:47
728x90

 

 

 

제든지 로봇이 내리는 위치에 도달하면 그 즉시 내린다

이 부분을 코드에 넣지않아서 계속 틀렸었다. 

 

 

변화가 있을 때마다 언제든지 <로봇이 내리는 위치> , 즉 [n-1]자리에 로봇이 있다면 0으로 변경해준다. 

 

 

코드 : 

 

from collections import deque 


if __name__=="__main__" :
    n,k = map(int,input().split())
    durability = deque(map(int,input().split()))
    robot = deque([0]*(n*2))
    
    ans = 0
    while True :
        ans +=1 
        # 한 칸 회전 
        durability.rotate()
        robot.rotate()
        if robot[n-1] :# 내리는 자리에 로봇이 있다면 내림 
            robot[n-1] = 0
        
        #로봇 이동 
        for i in range(n-2,-1,-1) :
            if robot[i] and robot[i+1]==0 and durability[i+1]>=1 :
                robot[i+1] = 1 
                robot[i] = 0
                durability[i+1]-=1 
        if robot[n-1] :# 내리는 자리에 로봇이 있다면 내림 
            robot[n-1] = 0
        
        # 로봇 올리기 
        if durability[0] >0 :
            durability[0]-=1 
            robot[0] = 1 
        
        # 내구도의 0인 칸의 개수가 k개 이상이라면 과정을 종료
             
        if durability.count(0) >=k :
            print(ans)
            exit(0)

 

 

 

이렇게 생긴 컨테이너벨트를 생각해서 문제를 풀면된다. 

 

 

 

 

 

 

 

 

python에서는 특정값이 나온 횟수를 구하는 함수를 제공해준다. 위 코드는 그 함수인 count를 사용하였는데 시간이 1500ms가 나왔다. 

 

 

 

 

 

이를 사용하지 않고 for문을 돌려 개수를 구하니 800ms로 시간이 많이 단축되었다.  코테에서 시간이 생각보다 많이 소요된다면 count함수를 제거해보자. 

 

 

    # 내구도의 0인 칸의 개수가 k개 이상이라면 과정을 종료
        count = 0
        for i in range(len(durability)) :
            if durability[i]==0 :
                count +=1 
             
        if count >=k :
            print(ans)
            exit(0)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

참고 블로그 :

 

https://developer-ellen.tistory.com/71

 

BOJ - 컨베이어 벨트 위의 로봇 20055번 (python)

❓ 문제 - 백준 컨베이어 벨트 위의 로봇 20055번 - python 풀이법 출처 (https://www.acmicpc.net/problem/20055) 20055번: 컨베이어 벨트 위의 로봇 길이가 N인 컨베이어 벨트가 있고, 길이가 2N인 벨트가 이 컨..

developer-ellen.tistory.com

 

 

 

 

 

 

 

반응형