소토
소토의 기록하는 삶
소토
전체 방문자
오늘
어제
  • 분류 전체보기 (34)
    • Algorithm (34)
      • Problem (34)
    • Web (0)
    • ML & AI (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 코드스테이츠
  • 패스트캠퍼스
  • 패스트캠퍼스후기
  • 알고리즘
  • 직장인자기계발
  • 한번에끝내는JavaSpring웹개발마스터초격차패키지Online
  • 문제
  • 백준
  • 패캠챌린지
  • 직장인인강

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
소토

소토의 기록하는 삶

Algorithm/Problem

[Baekjoon] 14891 : 톱니바퀴 - Python

2022. 2. 7. 16:46

Silver 1

 

문제

 

14891번: 톱니바퀴

총 8개의 톱니를 가지고 있는 톱니바퀴 4개가 아래 그림과 같이 일렬로 놓여져 있다. 또, 톱니는 N극 또는 S극 중 하나를 나타내고 있다. 톱니바퀴에는 번호가 매겨져 있는데, 가장 왼쪽 톱니바퀴

www.acmicpc.net

 

문제 풀이

주어진 회전 동작들을 순서대로 입력받고 마지막 동작이 끝나고 점수를 계산하여 출력한다.

 

회전이 진행되기 전의 톱니바퀴 상태를 기준으로 인접한 톱니바퀴의 값이 같은지 확인해야 한다. 2번째와 6번째 톱니의 값을 비교하면 된다. (나는 처음에 회전 후에 하는 걸로 이해했었다.. 왜지,,?)

회전 방법으로 주어진 톱니바퀴를 기준으로 오른쪽과 왼쪽 톱니바퀴들의 회전 방향을 리스트에 저장해준다.

 

deque의 rotate를 이용해 회전 방향대로 모두 회전 시킨다.

 

회전이 모두 완료되면 주어진 방식으로 점수를 계산하여 출력한다.

 

코드

from collections import deque

gear = []
for _ in range(4):
    gear.append(deque(input()))

n = int(input())
order = []
for _ in range(n):
    order.append(list(map(int, input().split())))


# 톱니바퀴 동작
for o in order:
    num, base_rotation = o[0]-1, o[1]

    rotation = [0, 0, 0, 0]
    rotation[num] = base_rotation

    # 오른쪽 톱니바퀴들
    for i in range(num+1, 4, 1):
        # 같으면 멈추고
        if gear[i][6] == gear[i-1][2]:
            break
        # 다르면 방향 반대로
        rotation[i] = rotation[i-1] * -1

    # 왼쪽 톱니바퀴들
    for i in range(num-1, -1, -1):
        # 같으면 멈추고
        if gear[i][2] == gear[i+1][6]:
            break
        # 다르면 방향 바꿔서 회전
        rotation[i] = rotation[i+1] * -1

    # 정해진 방향으로 회전
    for i in range(4):
        gear[i].rotate(rotation[i])

# 점수 계산
score = 0
if gear[0][0] == '1':
    score += 1
if gear[1][0] == '1':
    score += 2
if gear[2][0] == '1':
    score += 4
if gear[3][0] == '1':
    score += 8

print(score)

 

728x90
저작자표시 (새창열림)

'Algorithm > Problem' 카테고리의 다른 글

[Baekjoon] 21610번 : 마법사 상어와 비바라기 - Python  (0) 2022.02.11
[Baekjoon] 14500 : 테트로미노 - Python  (0) 2022.02.10
[Baekjoon] 15683번 : 감시 - Python  (0) 2022.02.04
[Baekjoon] 20055번 : 컨베이어 벨트 위의 로봇 - Python  (0) 2022.02.04
[Baekjoon] 2565번 : 전깃줄  (0) 2022.01.25
    소토
    소토

    티스토리툴바