본문 바로가기
알고리즘/[python] 백준 BOJ

[python] 백준 30823 건공문자열

by Alan_Kim 2023. 12. 3.
728x90
반응형

https://www.acmicpc.net/problem/30823

 

30823번: 건공문자열

양의 정수 $N$, $K$와 영어 알파벳 소문자로 구성된 길이가 $N$인 문자열 $S$가 주어진다. reverse(i)를 $S$의 $i, i+1, ... , i+k-1$번째 문자로 이루어진 부분 문자열을 뒤집는 연산이라고 정의하자. $i = 1, 2,

www.acmicpc.net

 

 

문제 해결

  • 시간초과에 고민을 많이 해보게 된 문제
  • 하나씩 돌리면 당연히 정답이 나오지만 숫자가 500000까지 가능하므로 시간초과가 난다.
  • 따라서 규칙을 찾아야한다.
  • 규칙은 직접 해보면서 찾는 것이 쉽다.
  • 먼저 K번째 문자부터 끝문자까지 순서대로 나온다는 것을 알 수 있다.
  • 그리고 N과 K의 차이가 홀수면 앞에 K-1번째 문자까지 순서대로 나오고 짝수이면 K-1번째 문자까지 역순으로 나온다.
  • 예외조건이 있는데 K=1이면 그냥 문자열이 그대로 나온다는 예외가 있으니 확인해야한다.

 

CODE

import sys
input = sys.stdin.readline

N, K = map(int, input().split())
A = str(input().rstrip())
if K==1:
    answer = A
elif (N-K)%2:
    answer = A[K-1:] + A[:K-1]
else:
    
    answer = A[K-1:] + A[K-2::-1]

print(answer)

 

 

728x90
반응형

'알고리즘 > [python] 백준 BOJ' 카테고리의 다른 글

[python] 백준 1069 집으로  (2) 2023.12.07
[python] 백준 1981 배열에서 이동  (0) 2023.12.04
[python] 백준 2234 성곽  (2) 2023.12.03
[python] 백준 1358 하키  (0) 2023.11.30
[python] 백준 7579 앱  (0) 2023.11.26

댓글