'삼성 SW 역량 테스트' 기출 문제 입니다. 😀
문제 👉 14891번: 톱니바퀴
1. 문제
- 톱니바퀴는 총 4개 존재한다.
- 톱니바퀴는 총 8개의 톱니를 가지고, 톱니는 N극과 S극 중 하나를 가진다.
- 톱니바퀴의 회전은 시계 방향(0)과 반시계 방향(1)이 있고 K번 회전한다.
- 특정 톱니바퀴가 회전할 때, 인접한 톱니는 극이 다르면 반대로 회전하고, 같으면 회전하지 않는다.
- 총 K번 회전시킨 이후에 네 톱니바퀴의 12시 방향을 통해 점수를 출력한다.
2. 풀이
시뮬레이션
을 이용한 문제 풀이
- 톱니바퀴의 회전 함수를 구현한다.
- K번의 회전 마다 회전하는 톱니와 방향을 배열에 저장한다.
- 배열에 존재하는 톱니 회전한다.
3. 코드
T = [list(map(int, input().strip())) for _ in range(4)]
K = int(input())
R = [list(map(int, input().split())) for _ in range(K)]
def solution():
ret = 0
def rotate(i, r):
if r == 1: # 시계
tmp = T[i-1][-1]
for j in range(8):
T[i-1][j], tmp = tmp, T[i-1][j]
else: # 반시계
tmp = T[i-1][0]
for j in range(7, -1, -1):
T[i-1][j], tmp = tmp, T[i-1][j]
for i, r in R:
arr = [(i,r)]
# 오른쪽
ni, nr = i, r
while ni < 4: # 1,2,3 톱니바퀴는 오른쪽 확인
if T[ni-1][2] != T[ni][6]:
nr = -nr
ni += 1
arr.append((ni, nr))
else:
break
# 왼쪽
ni, nr = i, r
while ni > 1: # 2,3,4 톱니바퀴는 왼쪽 확인
if T[ni-1][6] != T[ni-2][2]:
nr = -nr
ni -= 1
arr.append((ni, nr))
else:
break
# 회전
for a, b in arr:
rotate(a,b)
# 점수의 합
for i in range(4):
if T[i][0] == 1:
ret += 2**i
return ret
print(solution())
- 결과 : 76 ms
References
🏋🏻 개인적으로 공부한 내용을 기록하고 있습니다.
잘못된 부분이 있다면 과감하게 지적해주세요!! 🏋
'Coding Test > BOJ' 카테고리의 다른 글
[백준] 15683 - 감시 [Python(파이썬)] (0) | 2021.11.22 |
---|---|
[백준] 14890 - 경사로 [Python(파이썬)] (0) | 2021.11.22 |
[백준] 14889 - 스타트와 링크 [Python(파이썬)] (0) | 2021.11.22 |
댓글