본문 바로가기
Problem Solving

[Code Tree - Intermediate] 문자열 한 칸씩 밀어내며 뒤집기

by Oh Seokjin 2021. 8. 7.

코드트리 | 코딩테스트 준비를 위한 알고리즘 정석 (codetree.ai)

📚 문제 확인

  • 문자열과 요청의 갯수N, 세부 요청이 차례로 주어진다.
  • 요청을 수행한 결과를 출력한다.
  • 각 요청은 다음과 같다.

1. 맨 앞의 문자를 가장 뒤로 보내고 나머지는 한 칸씩 앞으로 당기기
2. 맨 뒤의 문자를 가장 앞으로 가져오고 나머지는 한 칸씩 뒤로 밀기
3. 문자열을 좌우로 뒤집기

 

📝 입출력 예시

 

🔍 문제 분석

  • 문자열을 조작하는 방법을 알고 있으면 해결할 수 있는 문제

 

✅ 최종 풀이 1

  • 처음 생각한 방법은 문자를 리스트에 나누어 받은 뒤 리스트 안에서 연산하고, join으로 출력하는 방법
  • 문자열을 쪼갠 뒤 다시 붙이는 과정이 수행시간에 큰 영향을 미친다는 것을 알게 되었다.
word, spin = input().split()
command_list = []

for i in range(int(spin)):
    command_list.append(int(input()))

word_list = list(word)

for command in command_list:
    if command == 1:
        word_list.append(word_list.pop(0))
        print("".join(word_list))
    elif command == 2:
        word_list.insert(0, word_list.pop(len(word_list)-1))
        print("".join(word_list))
    else:
        word_list.reverse()
        print("".join(word_list))

 

✅ 최종 풀이 2

  • 문자열 자체로 연산을 진행하니 Runtime이 비약적으로 단축된 것을 확인할 수 있었다.
word, spin = input().split()
command_list = []

for i in range(int(spin)):
    command_list.append(int(input()))

for command in command_list:
    if command == 1:
        word = word[1:] + word[0]
        print(word)
    elif command == 2:
        word = word[-1] + word[:-1]
        print(word)
    else:
        word = word[::-1]
        print(word)

댓글