Programming/CodingTest

[코드트리] 삼성 SW 역량테스트 | 2017년 하반기 오후 1번 | 돌아가는 팔각 의자

콩순이컴퓨터 2025. 6. 4. 04:23

https://www.codetree.ai/ko/frequent-problems/samsung-sw/problems/rounding-eight-angle/description

 

코딩테스트 기출 문제 설명: 돌아가는 팔각 의자 | 코드트리

코딩테스트 기출 문제 돌아가는 팔각 의자의 상세 설명입니다. 문제 요구사항을 정확히 파악하고 효율적인 알고리즘을 설계해보세요.

www.codetree.ai

 

 

  • 문제유형 : 시뮬레이션
  • 난이도 : L11
  • 정답률 : 59%

 

풀이방법

 

코드

c = [[]]
for _ in range(4):
    c.append(list(map(int, input())))
k = int(input())

#[회전시킬 의자 번호 n, 방향 d]
for _ in range(k):
    cur_n, cur_d = map(int, input().split())

    if cur_n == 1:
        rotate = [] #[rotate_n, rotate_d]
        rotate.append([cur_n, cur_d])
        while cur_n < 4:
            if c[cur_n][2] != c[cur_n+1][6]:
                rotate.append([cur_n+1, -cur_d])
                cur_n += 1
                cur_d = -cur_d
            else:
                break

    elif cur_n == 2:
        rotate = []
        rotate.append([cur_n, cur_d])
        if c[1][2] != c[2][6]:
            rotate.append([1, -cur_d])
        while cur_n < 4:
            if c[cur_n][2] != c[cur_n+1][6]:
                rotate.append([cur_n+1, -cur_d])
                cur_n += 1
                cur_d = -cur_d
            else:
                break
        
    elif cur_n == 3:
        rotate = []
        rotate.append([cur_n, cur_d])
        if c[3][2] != c[4][6]:
            rotate.append([4, -cur_d])
        while cur_n > 1:
            if c[cur_n-1][2] != c[cur_n][6]:
                rotate.append([cur_n-1, -cur_d])
                cur_n -= 1
                cur_d = -cur_d
            else:
                break

    elif cur_n == 4:
        rotate = []
        rotate.append([cur_n, cur_d])
        while cur_n > 1:
            if c[cur_n-1][2] != c[cur_n][6]:
                rotate.append([cur_n-1, -cur_d])
                cur_n -= 1
                cur_d = -cur_d
            else:
                break
    
    for n, d in rotate:
        if d==1:
            new_c = [c[n][-1]]
            new_c += c[n][:-1]
            c[n] = new_c
        elif d==-1:
            new_c = c[n][1:]
            new_c.append(c[n][0])
            c[n] = new_c

result = 0
for i in range(1, len(c)):
    if c[i][0] == 1:
        result += 2**(i-1)
print(result)