본문 바로가기

알고리즘(백준 등) 공부

SWEA 22979. 문자열 옮기기

문자열과 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