코테풀이/SW Expert Academy

22979. 문자열 옮기기

miimu 2025. 11. 18. 17:09

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

 

SW Expert Academy

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

swexpertacademy.com

 

어떤 문자열 S가 주어졌을 때,

숫자 리스트에서 X가 양수이면 맨앞 글자를 맨 뒤로 보내는 것을 X번,

X가 음수이면, 맨뒷 글자를 맨 앞으로 보내는 것을 X번,

0이라면 아무 행동도 취하지 않는다.

 

아이디어 :

모든 횟수를 더한 뒤,

절댓값을 취한 후 문자열 길이로 나눈 나머지를 기억한다.

이 나머지만큼 모든 횟수의 합이 양수라면 맨 앞 글자를 맨 뒤로 보내고,

음수라면 맨 뒷 글자를 맨 앞으로 보낸다.

 

여기서, 반복해서 보내는 것을 미리 문자열 slicing하는 것으로 대체할 수 있다.

 

T = int(input())

for t in range(T) :
    S = input()
    length = len(S)
    K = int(input())
    X = map(int, input().split())

    final_X = sum(X)
    remain = abs(final_X) % length

    if final_X > 0 :
        S = S[remain:] + S[:remain]
    elif final_X < 0 :
        S = S[length - remain:] + S[:length - remain]

    print(S)

 

절댓값이 중요하다.

절댓값 안 취해주니, 음수의 나눗셈의 나머지 계산이 생각해 두었던 것과 달라진다.