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