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 |
댓글