[코드트리] 시뮬레이션 - 컨베이어 벨트

김멉덥·2024년 4월 29일
0

알고리즘 공부

목록 보기
151/171
post-thumbnail
post-custom-banner

코드트리 학습하기 - 알고리즘 입문 : 시뮬레이션

Code

n, t = map(int, input().split())
belt = [list(map(int, input().split())) for _ in range(2)]

time = 0

while(time < t):
    # 두번째줄의 배열은 우선 반대로 돌려서 -> 원소들 이동 -> 마지막에 다시 돌리기
    tmp = belt[1]
    belt[1] = tmp[::-1]

    # 위치가 덮어써지므로 tmp로 저장해둘 원소들
    tmp1 = belt[1][0]
    tmp2 = belt[0][n-1]

    # 윗줄 덮어쓰기
    for x in range(n-1, 0, -1):
        belt[0][x] = belt[0][x-1]
    # 아랫줄 덮어쓰기
    for y in range(n-1):
        belt[1][y] = belt[1][y+1]

    # 저장된 원소들 이동시켜서 배치
    belt[0][0] = tmp1
    belt[1][n-1] = tmp2

    # 두번째줄의 배열 다시 돌리기
    tmp = belt[1]
    belt[1] = tmp[::-1]

    time += 1

# 정답 출력
for i in range(len(belt)):
    print(' '.join(map(str, belt[i])))

풀이 및 해설

예제)
1 2 3 
6 5 1

# 1. 두번째 줄의 배열 뒤집기
1 2 3
1 5 6

# 2. 원소 이동
1 1 2
5 6 3

# 3. 두번째 줄의 배열 다시 뒤집기
1 1 2
3 6 5
  • 원소 이동을 안뒤집어진 상태에서 이동하도록 해서 뒤집고 → 이동 → 뒤집고 해주어야 했다
  • 원소 이동
    • 첫번째 줄에서 가장 오른쪽, 두번째 줄에서 가장 왼쪽 을 각각 tmp1, tmp2에 저장해두기
    • 높이가 바뀌게 되는 원소 제외하고 모두 이동
    • tmp1, tmp2에 저장된 값을 높이 변경되어 이동시킨 자리에 배치
profile
데굴데굴 뚝딱뚝딱 개발기록
post-custom-banner

0개의 댓글