[프로그래머스/181905] 문자열 뒤집기
in Study / Coding Test
☑️ 문제
☑️ 풀이
첫 번째 풀이
- 구간을 세 개로 나누어서
substring()
메서드로 문제를 해결하였다.
//시간: 35.20ms
//메모리: 88.1MB
class Solution {
public String solution(String my_string, int s, int e) {
String answer = "";
String start = my_string.substring(0, s);
String middle = my_string.substring(s, e + 1);
String end = my_string.substring(e + 1);
String newM = "";
for (int i = e; i >= s; i--) {
newM += my_string.charAt(i);
}
answer += start;
answer += newM;
answer += end;
return answer;
}
}
- 가운데 구간을 뒤집는 과정이나 세 구간을 다시 이어붙이는 과정이 불필요하게 길었고, 다른 사람의 풀이를 보면서 다시 풀어보았다.
두 번째 풀이
StringBuilder
의reverse()
메서드를 사용해서 풀었다.
//시간: 13.02ms
//메모리: 80.9MB
class Solution {
public String solution(String my_string, int s, int e) {
StringBuilder sb = new StringBuilder(my_string.substring(s, e + 1));
sb.reverse();
return my_string.substring(0, s) + sb + my_string.substring(e + 1);
}
}
☑️ 문법 정리 - StringBuilder
StringBuilder
- 가변적인 문자열을 처리하기 위한 클래스 - 문자열과 문자열을 더하거나 변경하게 되면 새로운 객체를 생성하는 것이 아니라 기존의 데이터에 추가 및 변경된다.
- 속도가 빠르며 상대적으로 부하가 적다.
생성자
StringBuilder sb = new StringBuilder(); // 기본 생성자
StringBuilder sb = new StringBuilder(20); // 사이즈를 지정하여 생성
StringBuilder sb = new StringBuilder("hello"); // 문자열을 인자로 받아서 생성
append()
- 문자열 추가
StringBuilder sb = new StringBuilder("Hello");
sb.append(" world");
System.out.println(sb); // Hello world
insert(index, str)
- 특정 인덱스 위치(index)에 문자열(str) 삽입
StringBuilder sb = new StringBuilder("He World");
sb.insert(2, "llo") // 2번 인덱스에 "llo" 문자열 삽입
System.out.println(sb); // Hello world
delete(startIndex, endIndex)
- 시작 인덱스(startIndex)부터 종료 인덱스(endIndex) 사이의 문자열 제거
- 문자열에서 시작과 끝은 항상
시작 ≤ 범위 < 끝
형태
StringBuilder sb = new StringBuilder("Hello world");
sb.delete(6, 9); // 6번 인덱스부터 9번 인덱스 전까지 삭제
System.out.println(sb); // Hello ld
deleteCharAt(index)
- 특정 인덱스의 한 문자만 삭제
StringBuilder sb = new StringBuilder("Hello");
sb.deleteCharAt(4); // 4번 인덱스 위치의 문자 삭제
System.out.println(sb); // Hell
reverse()
- 문자열을 역순으로 변경
StringBuilder sb = new StringBuilder("Hello");
sb.reverse();
System.out.println(sb); // olleH
capacity()
- String 클래스와 다르게 char[] 배열 사이즈를 여유롭게 잡아줌
- 현재 char[] 배열이 가진 사이즈 정보를 리턴
length()
는 실제 데이터가 들어있는 문자열의 길이이고,capacity()
는 현재 배열 사이즈append()
등 문자열 조정 시 배열 사이즈가 자동으로 변경됨
StringBuilder sb = new StringBuilder("Hello");
System.out.println(sb.length()); // 5
System.out.println(sb.capacity()); // 21
setCharAt(index, str)
- 특정 인덱스의 문자를 변경
StringBuilder sb = new StringBuilder("Hello");
sb.setCharAt(0, 'h');
System.out.println(sb); // hello
setLength()
- 문자열 길이 조정
- 현재 문자열보다 길게 조정 시 공백으로 채워짐
- 현재 문자열보다 짧게 조정 시 나머지 문자는 삭제됨
StringBuilder sb = new StringBuilder("Hello World");
sb.setLength(9);
System.out.println(sb + "끝"); // Hello Wor끝
sb.setLength(11);
System.out.println(sb + "끝"); // Hello Wor 끝