본문 바로가기
알고리즘 문제/Java

[LeetCode/Java] Reverse String II

by 현장 2026. 7. 8.

-Code

import java.util.*;

public class LeetCode541 {
    // Reverse String II
    public String reverseStr(String s, int k) {
        char[] chars = s.toCharArray();
        int len = chars.length;
        /**
         * k 범위 만큼 뒤집는데,
         * k를 뒤집으면 다음 k 범위를 건너뜀
         */
        for (int i = 0; i < len; i += 2 * k) {
            int start = i;
            // index 오류를 막기위한 범위 검사
            int end = Math.min(i + k - 1, len - 1);
            // 해당 범위 뒤집기
            while (start < end) {
                char temp = chars[start];
                chars[start] = chars[end];
                chars[end] = temp;
                start++;
                end--;
            }
        }
        // 문자열 생성
        StringBuilder answer =  new StringBuilder();
        for (char c : chars) {
            answer.append(c);
        }
        return answer.toString();
    }
}

처음에 잘못 이해해서 시작 위치에서 k만큼만 뒤집는 문제인 줄 알았으나 k만큼 뒤집과 k만큼은 넘어가고 다시 k만큼 뒤집는 문제였습니다.

 

- StringBuilder를 사용한 뒤집기 코드

import java.util.*;

public class LeetCode541 {
    // Reverse String II
    public String reverseStr(String s, int k) {
        int len = s.length();
        StringBuilder answer = new StringBuilder();
        /**
         * k 범위 만큼 뒤집는데,
         * k를 뒤집으면 다음 k 범위를 건너뜀
         */
        for (int start = 0; start < len; start += 2 * k) {
            // index 오류를 막기위한 범위 검사
            int reverseEnd = Math.min(start + k, len);
            // 해당 범위 뒤집어 저장
            StringBuilder temp = new StringBuilder(s.substring(start, start + k))
                    .reverse();
            answer.append(temp);
            // 뒤집지 않는 부분 추가
            int remainEnd = Math.min(start + 2 * k, len);
            // 붙일 문자가 남아있으면 붙이기
            if (reverseEnd < remainEnd) {
                answer.append(s, reverseEnd, remainEnd);
            }
        }
        return answer.toString();
    }
}

'알고리즘 문제 > Java' 카테고리의 다른 글

[LeetCode/Java] Flood Fill  (0) 2026.07.10
[LeetCode/Java] Shortest Completing Word  (0) 2026.07.09
[LeetCode/Java] To Lower Case  (0) 2026.07.07
[LeetCode/Java] Binary Search  (0) 2026.07.06
[LeetCode/Java] Word Pattern  (0) 2026.07.05