[프로그래머스] 표 편집

bej_ve·2022년 11월 5일
0

python알고리즘

목록 보기
45/46

<문제>
처음 표의 행 개수를 나타내는 정수 n, 처음에 선택된 행의 위치를 나타내는 정수 k, 수행한 명령어들이 담긴 문자열 배열 cmd가 매개변수로 주어질 때, 모든 명령어를 수행한 후 표의 상태와 처음 주어진 표의 상태를 비교하여 삭제되지 않은 행은 O, 삭제된 행은 X로 표시하여 문자열 형태로 return 하도록 solution 함수를 완성해주세요.

  • "U X": 현재 선택된 행에서 X칸 위에 있는 행을 선택합니다.
  • "D X": 현재 선택된 행에서 X칸 아래에 있는 행을 선택합니다.
  • "C" : 현재 선택된 행을 삭제한 후, 바로 아래 행을 선택합니다. 단, 삭제된 행이 가장 마지막 행인 경우 바로 윗 행을 선택합니다.
  • "Z" : 가장 최근에 삭제된 행을 원래대로 복구합니다. 단, 현재 선택된 행은 바뀌지 않습니다.

<코드>

def solution(n, k, cmd):
    answer = ''
    
    linkedList={i: [i-1,i+1] for i in range(1, n+1)}
    OX=["O" for i in range(1,n+1)]
    stack=[]
    k+=1
    print(linkedList)
    for c in cmd:
        if c[0]=='D':
            for _ in range(int(c[2:])):
                k=linkedList[k][1]
        elif c[0]=='U':
            for _ in range(int(c[2:])):
                k=linkedList[k][0]
        elif c[0]=='C':
            prev,next=linkedList[k]
            stack.append([prev,next,k])
            OX[k-1]="X"
            
            if next==n+1:
                k=linkedList[k][0]
            else:
                k=linkedList[k][1]
                
            if prev==0:
                linkedList[next][0]=prev
            elif next==n+1:
                linkedList[prev][1]=next
            else:
                linkedList[prev][1]=next
                linkedList[next][0]=prev
        elif c[0]=='Z':
            prev,next,now=stack.pop()
            OX[now-1]="O"
            
            if prev==0:
                linkedList[next][0]=now
            elif next==n+1:
                linkedList[prev][1]=now
            else:
                linkedList[prev][1]=now
                linkedList[next][0]=now
    return "".join(OX)

0개의 댓글