코딩테스트/SWEA

[Python, 파이썬] SWEA 1228. [S/W 문제해결 기본] 8일차 - 암호문1

알코딩 2024. 11. 10. 13:25

I(삽입) x, y, s라는 명령어가 주어졌을 때, 모든 명령어를 수행하고 나온 결과의 암호문의

처음 10자리의 숫자를 구하는 문제.

 

 

- I(삽입) x, y, s : 앞에서부터 x의 위치 바로 다음에 y개의 숫자를 삽입

 

첫 번째 줄 : 원본 암호문의 길이 N ( 10 ≤ N ≤ 20 의 정수)

두 번째 줄 : 원본 암호문

세 번째 줄 : 명령어의 개수 ( 5 ≤ N ≤ 10 의 정수)

네 번째 줄 : 명령어

 

 

 

T = 10 # 테스트케이스의 개수 T

for test_case in range(1, T+1):

    N = int(input()) # 원본 암호 길이
    original = input().split() # 원본 암호

    Q = int(input()) # 질의의 개수
    add = input().split('I ')[1:] # 덧붙일 암호들

    for plus in add:
        index = int(plus.split()[0]) # 붙이고 싶은 위치 번호 
        original = original[:index] + plus.split()[2:] + original[index:] # 덧붙여진 암호 문자열

    print("#%d %s" % (test_case, ' '.join(original[:10])))
 

 

 

 

[문제풀이]


 

D3라 하기엔 무척 쉬웠다 근데 문제 설명이 좀 깔끔하지 않음....

 

덧붙일 연산들은 I 1 5 400905 336948 119288 I 8 6 436704 702451 762737

이런식으로 I를 기준으로 여러 연산이 주어진다.

 

그래서 I를 기점으로 각 질의를 나누고, 각각 수행한다.

나눠진 질의들은 x, y, 여러개의 s이다.

index = int(plus.split()[0]) # 붙이고 싶은 위치 번호 
original = original[:index] + plus.split()[2:] + original[index:] # 덧붙여진 암호 문자열
 

그래서 질의에서 나눠 붙일 위치 번호와 덧붙여질 암호를 찾고, 그리고 원본 암호 중간에 끼워넣어 새 암호를 생성하는 과정을 반복해주면 끝!

 

그렇게 구한 암호의 처음 10자리 수가 답이다.