문자열 한 칸씩 밀어내며 뒤집기

훈이는못말려·2023년 8월 13일
0

Algorithm

목록 보기
6/7
post-thumbnail

문제

문자열 한 개 입력으로 주어지고 q개의 요청이 주어지면, 각 요청을 수행한 결과를 모두 출력하는 코드를 작성해보세요. 요청의 종류에는 아래의 세 가지가 있습니다.

  1. 가장 앞에 있는 문자를 제외한 나머지 문자를 한 칸씩 앞으로 당기고 가장 앞에 있던 문자를 가장 뒤로 옮깁니다.

  2. 가장 뒤에 있는 문자를 제외한 나머지 문자를 한 칸씩 뒤로 밀고 가장 뒤에 있던 문자를 가장 앞으로 옮깁니다.

  3. 문자열을 좌우로 뒤집습니다.

입력 형식

첫 번째 줄에는 시작 문자열과 요청의 개수 q가 공백을 사이에 두고 주어지고,

두 번째 줄부터는 q개의 줄에 걸쳐 요청이 주어집니다. 잘못된 형태의 요청은 주어지지 않습니다.

1 ≤ 초기 문자열의 길이 (n) ≤ 1,000

1 ≤ q ≤ 1,000

입출력 예제

입력:

abcd 4
1
1
2
3

출력:

bcda
cdab
bcda
adcb

해결

  1. 문자열을 앞으로 당기기 위해서는 가장 앞의 문자를 임시 변수에 저장한 뒤, 문자열을 앞부터 순회하며 문자열을 한 칸씩 앞으로 당겨주고 문자열의 제일 뒤에 임시 벼수에 저장된 문자를 넣어준다.
  1. 문자열을 뒤로 밀기 위해서는 가장 뒤의 문자를 임시 변수에 저장한 뒤, 문자열을 뒤부터 순회하며 문자열을 한 칸씩 뒤로 밀어주고 문자열의 제일 앞에 임시 변수에 저장된 문자를 넣어준다.
  1. 문자열을 좌우로 뒤집기 위해서는 문자열의 절반에 대하여 순회를 하면서 좌우 대칭 위치에 있는 문자와 swap을 해준다.
# 문자열과 q를 입력받습니다.
string, q_num = input().split()
# 문자열 내 값을 직접 변경하기 위해서는 리스트로 변환하여 해결합니다.
list_str = list(string)
q_num = int(q_num)

# 문자열의 길이를 구합니다.
str_size = len(list_str)

# q개의 질의를 수행합니다.
for i in range(q_num):
    # 요청을 입력받습니다.
    q_type = int(input())

    if q_type == 1:
        # step1: 가장 앞의 문자를 저장한 뒤,
        # step2: 문자열을 앞부터 순회하며 문자를 한 칸씩 앞으로 당기고
        # step3: 문자열의 제일 뒤에 가장 앞에 있던 문자를 넣어줍니다. 
        front = list_str[0]                   # step1
        for i in range(1, str_size):          # step2
            list_str[i - 1] = list_str[i]
        list_str[str_size - 1] = front        # step3

        # 리스트를 문자열로 변환하여 출력합니다. 
        print("".join(list_str))

    elif q_type == 2:
        # step1: 가장 뒤의 문자를 저장한 뒤,
        # step2: 문자열의 뒤부터 순회하며 문자를 한 칸씩 뒤로 밀어주고
        # step3: 문자열의 제일 앞에 가장 뒤에 있던 문자를 넣어줍니다. 
        back = list_str[str_size - 1];          # step1
        for i in range(str_size - 1, 0, -1):    # step2
            list_str[i] = list_str[i - 1]    
        list_str[0] = back					    # step3

        # 리스트를 문자열로 변환하여 출력합니다. 
        print("".join(list_str))

    else:
    # 문자열의 앞부터 순회하며 좌우 대칭 위치에 있는 문자와 swap해줍니다. 
        # 단, 문자열의 절반만 순회해줍니다.
        for i in range(str_size // 2):
            temp = list_str[i]
            list_str[i] = list_str[str_size - i - 1]
            list_str[str_size - i - 1] = temp
        
        # 리스트를 문자열로 변환하여 출력합니다. 
        print("".join(list_str))

0개의 댓글