반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- 프로그래머스 스타수열
- 스타수열
- 로지스틱 최대우도
- 프로그래머스
- 스타수열 파이썬
- k겹 교차검증
- 인공지능 경진대회
- 딥러닝 가중치 갱신
- 카카오 코테 메뉴리뉴얼
- 과적합방지
- 메뉴리뉴얼 파이썬
- 자율성장 인공지능
- 비트마스킹
- 2차원동전뒤집기
- 데이터축소
- MLE
- 카카오 메뉴리뉴얼
- 프로그래머스광고삽입
- AI경량화
- 프로그래머스 2차원동전뒤집기 파이썬
- 프로그래머스 누적합
- 광고삽입 파이썬
- 딥러닝
- 모델경량화
- 딥러닝학습
- 인공신경망 학습
- 머신러닝 학습 검증
- 확률과우도
- 딥러닝파라미터
- 프로그래머스 2차원동전뒤집기
Archives
- Today
- Total
머신러닝 개발자의 러닝머신
14891: 톱니바퀴 (Python) 본문
반응형
<문제 유형> : 구현
☞ 문제 상황을 논리적, 체계적으로 구현하는 문제이다.
<구현해야 하는 것>
반복문을 돌면서 각 시행마다 톱니 번호, 회전 방향을 입력받아
양 옆의 톱니바퀴를 순차적으로 확인하면서 회전 가능한지 여부 확인해서 회전 가능하다면 리스트에 넣고
회전 가능하지 않으면 반복문 break해서 더이상 옆의 톱니들 확인하지 않도록 해주기
톱니 회전 가능 여부를 살펴본 뒤 모든 톱니 한번에 회전시키기
※ 주의 사항: 톱니 하나씩 확인하면서 회전 가능 여부 따지고 나서 그 순간 회전을 바로 시키지 않도록 주의 한다//
톱니의 정보가 바뀌면 회전 가능 여부가 바뀐 톱니의 정보에 대해서 따지게 되므로 톱니의 회전의 반영은
회전 가능 여부를 마친 뒤 동시에 회전시켜야 한다.
(1) 회전시키려는 톱니의 오른쪽에 있는 톱니들 회전 가능 여부 확인 -> have_to_rotate 에 (회전방향, 톱니 번호) 추가
(2) 회전시키려는 톱니의 왼쪽에 있는 톱니들 회전 가능 여부 확인 -> have_to_rotate 에 (회전방향, 톱니 번호) 추가
(3) 해당 톱니를 포함해서 회전 가능한 톱니들 회전, 위치 변화 동시 반영 -> turn() 함수 실행
(4) 모든 반복문이 종료된 후 점수 계산
# 톱니는 동시에 돌아가니까 톱니의 위치가 변한 것은 가장 마지막에 반영해야 함 !! 중요
import sys
#input = sys.stdin.readline -> 한줄씩 통채로 읽어오므로 map(int, input()) 이런식으로는 함께 사용하지 못함
steer = [[] for _ in range(4)] # N:0, S:1
for i in range(4):
steer[i] = list(map(int, input())) #공백없는 입력 띄어서 입력받기
k = int(input())
def turn(rot, origin_steer):
new_steer = [0 for _ in range(8)]
if rot == 1:
for j in range(8):
new_steer[j] = origin_steer[j-1]
else:
for j in range(-1, 7):
new_steer[j] = origin_steer[j+1]
return new_steer
## main ##
for _ in range(k):
st, rot = map(int, input().split()) # rot -> 1:시계, -1:반시계
st = st-1
have_to_rotate=[]
have_to_rotate.append((rot, st))
#움직이려는 톱니의 양 옆으로 하나씩 돌릴지 말지 결정하고 안돌리면 for문 break
#(1)오른쪽 돌아가는지
rot_r = rot
rot_l = rot
for p in range(st, 3):
rot_r = rot_r*(-1)
ax1 = steer[p][2]
ax2 = steer[p+1][6]
#print('steer[p]:{},ax1:{}, ax2:{}'.format(p, ax1, ax2))
if ax1 != ax2:
have_to_rotate.append((rot_r, p+1))
else:
break
#(2)왼쪽 돌아가는지
for p in range(st, 0, -1):
rot_l = rot_l*(-1)
ax1 = steer[p][6]
ax2 = steer[p-1][2]
if ax1 != ax2:
have_to_rotate.append((rot_l, p-1))
else:
break
#(3)후보 톱니 돌리기, 위치 변화 동시 반영
for r, idx in have_to_rotate:
steer[idx] = turn(r, steer[idx])
#(4) 점수 계산
score = 0
for i in range(4):
if steer[i][0] == 1:
score += 2**(i)
print(score)
반응형
'알고리즘 > boj' 카테고리의 다른 글
1655: 가운데를 말해요 (Python) (0) | 2022.07.28 |
---|---|
15685: 드래곤 커브 (Python) (0) | 2022.07.28 |
12865: 평범한 배낭 (Python) (0) | 2022.07.27 |
16639: 괄호 추가하기 3 (0) | 2022.07.16 |
18500 미네랄2 (0) | 2022.07.16 |