문자열과 x가 주어질 때 작업 이후의 문자열을 출력하는 문제이다. x > 0 이면 맨 앞의 문자를 맨 뒤로 이동하는 작업을 x번 하고, x < 0 이면, 맨 뒤의 문자를 맨 앞으로 이동하는 작업을 |x|번 한다.
|x|가 10^9 이하이므로 x번 작업을 직접하는게 아니라 문자열의 길이로 나눈 나머지 만큼만 하면 x번 작업하는 것과 동일한 결과를 얻게 되므로 길이로 나눈 나머지 횟수만큼 작업을 하면 된다.
StringBuilder s = new StringBuilder(br.readLine());
int n = Integer.parseInt(br.readLine());
StringTokenizer st = new StringTokenizer(br.readLine());
for(int i=0; i<n; i++) {
int a = Integer.parseInt(st.nextToken());
if(a > 0) {
a %= s.length();
for(int j=0; j<a; j++) {
s.append(s.charAt(0));
s.deleteCharAt(0);
}
} else {
a = Math.abs(a);
a %= s.length();
for(int j=0; j<a; j++) {
s.insert(0, s.charAt(s.length()-1));
s.deleteCharAt(s.length()-1);
}
}
}
sb.append(s.toString()).append('\n');
결과 코드는 다음과 같다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Solution {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int tc = Integer.parseInt(br.readLine());
StringBuilder sb = new StringBuilder();
while(tc-- > 0) {
StringBuilder s = new StringBuilder(br.readLine());
int n = Integer.parseInt(br.readLine());
StringTokenizer st = new StringTokenizer(br.readLine());
for(int i=0; i<n; i++) {
int a = Integer.parseInt(st.nextToken());
if(a > 0) {
a %= s.length();
for(int j=0; j<a; j++) {
s.append(s.charAt(0));
s.deleteCharAt(0);
}
} else {
a = Math.abs(a);
a %= s.length();
for(int j=0; j<a; j++) {
s.insert(0, s.charAt(s.length()-1));
s.deleteCharAt(s.length()-1);
}
}
}
sb.append(s.toString()).append('\n');
}
br.close();
System.out.print(sb);
}
}'알고리즘(백준 등) 공부' 카테고리의 다른 글
| SWEA 22759. 묶음 판매 (0) | 2026.04.21 |
|---|---|
| SWEA 22795. 일곱 부하의 평균 (0) | 2026.04.21 |
| SWEA 23003. 색상환 (0) | 2026.04.20 |
| SWEA 23005. 회문 만들기 (0) | 2026.04.17 |
| 백준 1384번: 메시지 (0) | 2026.04.16 |