룰루코딩

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

SWEA

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

rulru01 2024. 11. 15. 03:58

문제

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV14yIsqAHYCFAYD&categoryId=AV14yIsqAHYCFAYD&categoryType=CODE&problemTitle=%EC%95%94%ED%98%B8%EB%AC%B8&orderBy=FIRST_REG_DATETIME&selectCodeLang=ALL&select-1=&pageSize=10&pageIndex=1

 

SW Expert Academy

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

swexpertacademy.com

 


솔루션

for t in range(1,11):
    N = int(input())
    li = list(map(int, input().split()))
    cmd_N = int(input())
    cmd = input().split()

    i = 0
    while i < len(cmd):
        if cmd[i] == "I":
            start = int(cmd[i + 1])
            n = int(cmd[i + 2])
            insert =  map(int, cmd[i + 3:i + 3 + n])
            li = li[:start] + list(insert) + li[start:]
            i += 3 + n
        elif cmd[i] == "D":
            start = int(cmd[i + 1])
            n = int(cmd[i + 2])
            li = li[:start] + li[start + n:]
            i += 3
        else:
            i += 1
    print(f"#{t}",end=" ")
    print(*li[:10])

깨달은 점

for t in range(1, 11):
    N = int(input())  # 암호문의 길이
    li = list(map(int, input().split()))  # 원본 암호문
    cmd_N = int(input())  # 명령어 개수
    cmd = input().split("I")  # "I"를 기준으로 명령어 분리
    
    new_cmd = []
    for i in cmd[1:]:
        new_cmd.append(i.strip().split())

    for command in new_cmd:
        # 명령어가 삽입("I")인지 삭제("D")인지 확인
        if command[0] == "D":
            # "D" 명령어 처리: x 위치 다음부터 y개의 숫자를 삭제
            start = int(command[1])
            count = int(command[2])
            li = li[:start] + li[start + count:]
        else:
            # "I" 명령어 처리: x 위치 다음에 y개의 숫자를 삽입
            start = int(command[0])
            n = int(command[1])
            insert = list(map(int, command[2:2 + n]))  # 삽입할 숫자들을 정수 리스트로 변환
            li = li[:start] + insert + li[start:]

    # 결과 출력
    print(f"#{t}", end=" ")
    print(*li[:10])

이전문제 코드에서 추가할라면 이렇게 할 수 있지만 명령어 마다 다르게 하려면

방식을 바꾸는게 좋을 것 같아 바꾸었다.

 

 

for t in range(1,11):
    N = int(input())
    li = list(map(int, input().split()))
    cmd_N = int(input())
    cmd = input().split()
    print(cmd)

    i = 0
    while i < len(cmd):
        if cmd[i] == "I":
            start = cmd[i + 1]
            n = cmd[i + 2]
            insert = list(cmd[i + 3:i + 3 + n])
            li = li[:start] + insert + li[start:]
            i += 3 + n
        elif cmd[i] == "D":
            start = cmd[i + 1]
            n = cmd[i + 2]
            li = li[:start] + li[start + n:]
            i += 3
        else:
            i += 1
    print(f"#{t}",end=" ")
    print(*li[:10])

이렇게 새로 풀었다가 에러가 났다.

cmd[] 부분을 인덱스로 사용하기 위해 int형으로 변환시켜주어야한다.

추가로 주의할 부분은

list(map(int, cmd[i + 3:i + 3 + count]))

 

map 객체를 리스트에 바로 병합할 수 없다는 오류가 있어 

리스트로 한번더 변환한후 삽입해야한다!!