diff --git "a/17\354\243\274\354\260\250/(P)60059/60059_python_kimjoohye.py" "b/17\354\243\274\354\260\250/(P)60059/60059_python_kimjoohye.py" new file mode 100644 index 0000000..62a423f --- /dev/null +++ "b/17\354\243\274\354\260\250/(P)60059/60059_python_kimjoohye.py" @@ -0,0 +1,45 @@ +import numpy as np + +#key와 lock의 각각의 요소를 합친 배열의 결과 - answer +#answer의 배열의 요소가 모두 1이 아니면 false +def checklock(answer): + for i in answer: + for j in i: + if j!=1: + return False + return True + +#lock을 key의 size-1만큼 더해서 확장시킨 배열로 만들고 가장자리부분 0으로 초기화 +#key와 lock의 블록이 하나씩, 두개씩, 세개씩, ... 점점 많아지게 겹쳐서 더한 후 +#(겹쳐지는 부분이 많아지다가 모든 key요소와 모든 lock의 요소가 합쳐진 다음 다시 겹쳐지는 부분이 줄어듬) +#원래의 lock size에 맞게 배열 slice - checklock함수로 unlock할 수 있는지 확인 +def unlock(answerkey, lock): + N = len(lock) + M = len(answerkey) + #확장 + lock = np.pad(lock, (M-1, M-1)) + + #확장시킨 배열에 key를 오른쪽 아래방향으로 한칸씩 옮겨가면서 더하고 원래의 lock size에 맞게 배열 slice + newM = N+M-1 + for i in range(newM): + for j in range(newM): + resultlock = lock.copy() + resultlock[i:i+M,j:j+M] = lock[i:i+M,j:j+M] + answerkey[:][:] + if checklock(resultlock[M-1:M+N-1,M-1:M+N-1]): + return True + + return False +def solution(key, lock): + #numpy array로 변경 + answerkey = np.array(key) + lock = np.array(lock) + + flag = False + + for i in range(4): + # i*90만큼 key회전 -> 0, 90, 180, 270만 수행 + answerkey = np.rot90(answerkey, i) + flag = unlock(answerkey, lock) + if flag == True: + break + return flag diff --git "a/17\354\243\274\354\260\250/20055/20055_python_kimjoohye.py" "b/17\354\243\274\354\260\250/20055/20055_python_kimjoohye.py" new file mode 100644 index 0000000..273a463 --- /dev/null +++ "b/17\354\243\274\354\260\250/20055/20055_python_kimjoohye.py" @@ -0,0 +1,46 @@ +# [컨베이어 벨트 위의 로봇] +# 벨트가 각 칸 위에 있는 로봇과 함께 한 칸 회전한다. +# 가장 먼저 벨트에 올라간 로봇부터, 벨트가 회전하는 방향으로 한 칸 이동할 수 있다면 이동한다. 만약 이동할 수 없다면 가만히 있는다. +# 로봇이 이동하기 위해서는 이동하려는 칸에 로봇이 없으며, 그 칸의 내구도가 1 이상 남아 있어야 한다. +# 올리는 위치에 있는 칸의 내구도가 0이 아니면 올리는 위치에 로봇을 올린다. +# 내구도가 0인 칸의 개수가 K개 이상이라면 과정을 종료한다. 그렇지 않다면 1번으로 돌아간다. + +N, K = map(int, input().split()) +queue = list(map(int, input().split())) #컨베이어벨트 +robot = [0 for i in range(len(queue))] #robot유무 + +countStep = 0 + +while True: + countStep += 1 + # 컨베이어 벨트 & robot 회전 + queue.insert(0, queue.pop()) + robot.insert(0, robot.pop()) + + # robot 내리기 + if robot[N-1] == 1: + robot[N-1] = 0 + + # robot move + for i in range(N - 1, -1, -1): + if robot[i] == 1 and robot[i + 1] == 0 and queue[i + 1] > 0: + queue[i + 1] -= 1 + robot[i], robot[i + 1] = robot[i + 1], robot[i] + + if queue.count(0) >= K: + break + + # robot 내리기 + if robot[N-1] == 1: + robot[N-1] = 0 + + # robot 올리기 + if queue[0] > 0: + queue[0] -= 1 + robot[0] = 1 + + if queue.count(0) >= K: + break + +print(countStep) +