문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/181905
문제 설명
문자열 my_string과 정수 s, e가 매개변수로 주어질 때,
my_string에서 인덱스 s부터 인덱스 e까지를 뒤집은 문자열을 return 하는 solution 함수를 작성해 주세요.
제한 설명
- my_string은 숫자와 알파벳으로만 이루어져 있습니다.
- 1 ≤ my_string의 길이 ≤ 1,000
- 0 ≤ s ≤ e < my_string의 길이
입출력 예시
my_string | s | e | result |
"Progra21Sremm3" | 6 | 12 | "ProgrammerS123" |
"Stanley1yelnatS" | 4 | 10 | "Stanley1yelnatS" |
코드 구현
import java.util.*;
class Solution {
public String solution(String my_string, int s, int e) {
Stack<Character> stack = new Stack<>();
StringBuilder sb = new StringBuilder();
for(int i = 0; i < my_string.length(); i++) {
if(i >= s && i <= e) {
stack.add(my_string.charAt(i));
}
}
for(int i = 0; i < my_string.length(); i++) {
if(i >= s && i <= e) {
sb.append(stack.pop());
} else {
sb.append(my_string.charAt(i));
}
}
return sb.toString();
}
}
풀이
- 문제에서 s -> e 까지의 인덱스에 해당하는 문자를 뒤집어서 기존 문자열에 더해야합니다.
- 필자의 경우에는 stack을 활용하여 구현을 진행했습니다.
(stack은 LIFO 방식으로 처음에 넣은 값은 마지막에 빼는 방식) - for문을 활용하여 s와 e에 해당하는 조건인 경우 stack에 넣어놓습니다.
- 후에 stack 안에 있는 데이터를 꺼내 StringBuilder에 append 시켜줍니다.
- String으로 return 해야하기 때문에 StringBuilder.toString() 메서드를 활용합니다.
코드 구현(다른 방식)
class Solution {
public String solution(String my_string, int s, int e) {
StringBuilder answer = new StringBuilder(my_string.substring(s, e + 1));
answer.reverse();
return my_string.substring(0, s) + answer + my_string.substring(e + 1);
}
}
풀이
- 문제에서 s 부터 e + 1 까지의 substring( ) 영역의 데이터를 StringBuilder() 안에 넣어줍니다.
- StirngBuilder의 값을 reverse() 시켜줍니다.
- mystring의 첫 번째 인덱스부터 s 까지의 값과 answer, 그리고 e + 1 의 값을 더해서 반환해줍니다.
반응형
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] Java :: 2의 영역 (0) | 2024.03.23 |
---|---|
[프로그래머스] Java :: 가장 큰 수 (0) | 2023.10.05 |
[프로그래머스] Java :: 가장 큰 수 찾기 (0) | 2023.09.16 |
댓글