[SWEA] 1229. [S/W 문제해결 기본] 8일차 - 암호문2

야금야금 공부·2023년 5월 20일
0

SWEA

목록 보기
40/43
post-thumbnail

1229. [S/W 문제해결 기본] 8일차 - 암호문2



문제 풀이

  1. I(삽입) x, y, s : 앞에서부터 x의 위치 바로 다음에 y개의 숫자를 삽입한다. s는 덧붙일 숫자들이다. ex) I 3 2 123152 487651

  2. D(삭제) x, y : 앞에서부터 x의 위치 바로 다음부터 y개의 숫자를 삭제한다. ex) D 4 4

import sys
sys.stdin = open("input.txt", "r")

for t in range(1, 11):

    n = int(input())  # 원본 암호문 길이
    original = list(map(int, input().split()))

    m = int(input())  # 명령어 개수
    comment = list(input().split('I '))  # 명령어 I로 나눔


    for i in range(len(comment)):
        if comment[i].startswith('D'):   # 만약 명령어가 I가 아닌 D로 시작할 때
            dlist = comment[0].split('D ')

            for j in range(1, len(dlist)):
                ridx, rval = dlist[j].split()
                for a in range(int(rval)):
                    original.remove(original[int(ridx)])


        elif comment[i] != '':          # 만약 명령어가 I일 때, comment[0]가 ''
            x, y, *s = comment[i].split()

            for j in range(len(s)):
                if s[j] == 'D':         # 리스트 안에 D가 있을 경우
                    dlist = []
                    for k in range(j, len(s), 3):
                        dlist.append([s[k], s[k + 1], s[k + 2]])

                    for d, ridx, rval in dlist:
                    	# rval번 ridx 위치의 값을 제거
                        for k in range(int(rval)):  
                            original.remove(original[int(ridx)])
                    break

                else:  # int(x) + j 위치에 int(s[j])
                    original.insert(int(x) + j, int(s[j]))

    print(f"#{t}", end=' ')
    for i in range(10):
        print(original[i], end=' ')
    print()

0개의 댓글