SWEA(Python) 풀이/D3

SWEA[D3] (Python) 1230번 [S/W 문제해결 기본] 8일차 - 암호문3 풀이

개발윗미 2022. 5. 30. 17:51

Python으로 구현한 1230번 [S/W 문제해결 기본] 8일차 - 암호문3 문제 풀이입니다.

 

https://swexpertacademy.com/main/code/problem/problemDetail.do?problemLevel=3&contestProbId=AV14zIwqAHwCFAYD&categoryId=AV14zIwqAHwCFAYD&categoryType=CODE&problemTitle=&orderBy=FIRST_REG_DATETIME&selectCodeLang=PYTHON&select-1=3&pageSize=10&pageIndex=10&&&&&&&&&& 

 

SW Expert Academy

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

swexpertacademy.com


for tc in range(1, 11) :
    n = int(input())
    data = list(map(int, input().split()))
    o = int(input())
    order = list(input().split())

    type = ''
    pos = -1
    cnt = -1
    for i in range(len(order)) :
        if order[i] in ['I', 'D', 'A'] :
            type = order[i]
            pos = -1
            cnt = -1
        else :
            if type == 'I' : # 삽입
                if pos == -1 :
                    pos = int(order[i])
                    continue
                else :
                    if cnt == -1 :
                        cnt = int(order[i])
                        continue

                    data.insert(pos, int(order[i]))
                    pos += 1
            elif type == 'D' : # 삭제
                if pos == -1 :
                    pos = int(order[i])
                    continue
                else :
                    if cnt == -1 :
                        cnt = int(order[i])
                        for j in range(cnt) :
                            del data[pos]
            elif type == 'A' : # 추가
                if cnt == -1 :
                    cnt = int(order[i])
                else :
                    data.append(int(order[i]))

    print('#%d' % tc, end=' ')
    print(*data[:10])

 

1. 각 테스트 케이스마다 원본 암호문(data)과 명령어(order)를 리스트 형태로 구성한다.

 

2. order 리스트의 요소를 순서대로 하나씩 확인하며, 만약 해당 값이 'I' 혹은 'D' 혹은 'A'일 경우 type을 해당 문자로 갱신하고, pos와 cnt를 -1로 설정한다.

 

3. 해당 값이 숫자라면 아래와 같은 작업을 수행한다.

  - 만약 type이 'I'이고 pos가 -1이라면, 현재 값이 삽입할 위치를 의미하므로 pos에 해당 값(정수형으로 변환)을 할당하고 continue한다.

  - 만약 type이 'I'이고 pos가 -1이 아니고 cnt가 -1이라면, 현재 값이 삽입할 값의 개수를 의미하므로 cnt에 해당 값(정수형으로 변환)을 할당하고 continue한다.

  - cnt가 -1인지 확인하는 부분까지 continue가 되지 않았다면, 현재의 값이 삽입할 값을 의미하므로 data리스트의 pos 위치에 해당 값을 삽입한 후 pos 값을 1 증가시킨다.

 

  - 만약 type이 'D'이고 pos가 -1이라면, 현재 값이 삭제할 위치를 의미하므로 pos에 해당 값(정수형으로 변환)을 할당하고 continue한다.

  - 만약 type이 'D'이고 pos가 -1이 아니고 cnt가 -1이라면, 현재 값이 삭제할 값의 개수를 의미하므로 cnt에 해당 값(정수형으로 변환)을 할당한다.

  - 할당된 cnt개 만큼 pos위치에 존재하는 값을 삭제한다.

 

  - 만약 type이 'A'이고 cnt가 -1이라면, 현재 값이 추가할 값의 개수를 의미하므로 cnt에 해당 값(정수형으로 변환)을 할당한다.

  - 만약 type이 'A'이고 cnt가 -1이 아니라면, 해당 값(정수형으로 변환)을 data 리스트 뒤쪽에 추가한다.

 

4. 최종적으로 해당 테스트 케이스 번호와 함께 암호문의 처음 10개 항을 출력한다.