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
반응형
'알고리즘 > 백준 문제풀이' 카테고리의 다른 글
[삼성SW역량][Python/BOJ] 백준 17142 연구소3(BFS) (0) | 2022.07.18 |
---|---|
[삼성SW역량][Python/BOJ] 백준 17140 이차원 배열과 연산(구현) (0) | 2022.07.18 |
[삼성SW역량][Python/BOJ] 백준 17144 미세먼지 안녕!(시뮬레이션) (0) | 2022.07.15 |
[삼성SW역량][Python/BOJ] 백준 15684 사다리조작(dfs) (0) | 2022.07.15 |
[삼성SW역량][Python/BOJ] 백준 14890 경사로(구현) (0) | 2022.07.14 |