본문 바로가기
공부-코딩테스트/코테풀이 - 자바, 파이썬

1229. [S/W 문제해결 기본] 8일차 - 암호문2 (코딩테스트, SW Expert Academy)

by 령과 2022. 5. 9.

문제

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

 

SW Expert Academy

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

swexpertacademy.com

 

나의코드: 55분

T = 10
# 여러개의 테스트 케이스가 주어지므로, 각각을 처리합니다.
for test_case in range(1, T + 1):
    num_1 = int(input())#원본 암호문의 길이 N ( 100 ≤ N ≤ 200 의 정수)
    input_list = list(map(int, input().split())) #원본 암호문
    num_count = int(input())#세 번째 줄 : 명령어의 개수 ( 10 ≤ N ≤ 20 의 정수)
    input_target = list(input().split())#명령문
    input_target += ["end"]
    state=input_target[0]
    state_list = []
    
    for i in range(1,len(input_target)):
        if input_target[i] == "I" or input_target[i] == "D" or input_target[i] == "end":
            if state == "I":
                tmp_list = state_list[2:]
                tmp_list.reverse()
                for j in range(state_list[1]):
                    input_list.insert(state_list[0],tmp_list[j])
            else:
                for j in range(state_list[1]):
                    del input_list[state_list[0]]

            state = input_target[i]
            state_list = []
        else:
            state_list.append(int(input_target[i]))
    print("#"+str(test_case)," ".join(map(str,input_list[:10])))

문제 자체가 어려운 것이 아니였다. 단순히 풀 때 오류를 잡지 못해서 결국 VSCODE에서 풀고 복붙하여 문제를 해결

자동완성이 없는 환경에서 35분정도 계속 헤매다가 그냥 개발툴을 활용해버렸다.

분명 같은코드인데 왜 처음에 오류가 있다가 개발툴에서 돌리니 오류 안나서 복붙해보면 SWEA에서 오류가 안난다(?)

 

VS코드에서 오류를 고치고 미흡한 부분을 고치니 바로 통과는 하였다.

 

시간이 걸린 부분은 다음과 같다.

1. 마지막 명령어처리를 하지 않은 점

내가 짠 코드는 명령어를 발견(I,D)하면 이전에 명령어를 적용하고 state와 state_list를 비우는 식으로 처리했다.

마지막 명령어는 I,D를 발견하지 못하고 종료가 되므로 실행되지 않아 마지막에 end를 붙여서 실행되게 처리하였다.

 

2.insert를 하기위해 reverse를 했어야 했다.

댓글