관리 메뉴

개발 블로그

[Codetree/파이썬] 돌아가는 팔각 의자 문제풀이 본문

Algorithm

[Codetree/파이썬] 돌아가는 팔각 의자 문제풀이

토산인 2024. 9. 23. 17:57

문제 설명

https://www.codetree.ai/training-field/frequent-problems/problems/rounding-eight-angle/description?page=3&pageSize=20

 

코드트리 | 코딩테스트 준비를 위한 알고리즘 정석

국가대표가 만든 코딩 공부의 가이드북 코딩 왕초보부터 꿈의 직장 코테 합격까지, 국가대표가 엄선한 커리큘럼으로 준비해보세요.

www.codetree.ai

 

 

사고 흐름

1. 테이블 회전 명령을 하나씩 받으면서 실행해야겠다

2. 테이블을 직접 돌리기는 복잡하다 -> 테이블의 12시를 가리키는 인덱스를 사용해 테이블 돌아가는 것처럼 구현 -> 인덱스 저장 딕셔너리 사용 

3. 조건 만족(인접한 사람의 출신 지역 다르면) -> 한번에 인덱스 변경

 

문제 핵심과 알고리즘

구현

table = [list(input()) for _ in range(4)]
n = int(input())
dic = {1:0, 2:0, 3:0, 4:0}

for i in range(n) :
    v,d = map(int, input().split())
    r, l = v, v
    while r<4 and table[r-1][(dic[r]+2)%8]!=table[r][(dic[r+1]-2)%8] :
        r+=1
    while l>1 and table[l-1][(dic[l]-2)%8]!=table[l-2][(dic[l-1]+2)%8] :
        l-=1

    for j in range(l, r+1) :
        if abs(j-v)%2==1 :
            dic[j]+=d
        else :
            dic[j]+=d*(-1)

ans = 0
for k,v in dic.items() :
    ans+=2**(k-1)*int(table[k-1][v%8])
print(ans)

 

크게 흐름을 나누면

1. 조건 확인(인접한 사람의 출신 지역이 다르다면) -> 회전이 필요한 사람들 확인

2. 회전을 한번에 처리 (for문) 

 

문제 풀면서 헤맸던 부분

딱히 없었다. 

 

총평 

(소요시간: 30분)