티스토리 뷰

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com


1. 문제 내용

 

 

2. 접근 방식

  • 자료구조: List VS deque

입력받은 명령어는 왼쪽에서부터 값을 꺼내 활용할 테니, 시간 복잡도가 O(1)인 popleft()를 사용하기 위해 deque 구조를 사용할까 고민하였다. 그러나 D (삭제)를 슬라이싱으로 처리할 계획이었기 때문에 리스트를 선택하였다. (deque는 슬라이싱이 불가능하다)

문제가 조금 불친절했다. x의 위치라는 것이 1) x라는 값의 인덱스인지 2) index가 x인지 불명확하다고 생각했다. 그래도 이것은 주어진 테스트 케이스를 탐색하며 2)의 의미라는 것을 알 수 있었다. 그러나 테스트 케이스가 너무 길었고, 입력 조건이 간단한 테스트 케이스를 만들 수 없는 구조였다...

 

 

3. 정답 코드

T = 10
for test_case in range(1, T + 1):
    n = int(input())
    code =list(input().split())
    m = int(input())
    instructions = list(input().split())
    
    while instructions :
        instruction = instructions.pop(0)
        
        if instruction == 'I' :
            x = int(instructions.pop(0))
            y = int(instructions.pop(0))
            for i in range(y) :
                code.insert(x+i, instructions.pop(0))

        elif instruction == 'D' :
            x = int(instructions.pop(0))
            y = int(instructions.pop(0))
            if x - y == 0 :
                code = code[x:]
            else :
                code = code[:x-y] + code[x:]
            
        elif instruction == 'A' :
            y = int(instructions.pop(0))
            for i in range(y) :
                code.append(instructions.pop(0))

    print(f'#{test_case}', end=' ')
    for value in code[:10] :
        print(value, end=' ')
    print()
728x90