#1 문자열 뒤집기
문제설명
문자열 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" |
입출력 예 설명
#2 코드 및 알고리즘
class Solution {
public String solution(String my_string, int s, int e) {
String answer = my_string.substring(0, s);
for(int i = e; i >= s; i--){
answer += my_string.charAt(i);
}
answer += my_string.substring(e + 1);
return answer;
}
}
----------------------------------------------------
정확성 테스트
테스트 1 〉 통과 (9.04ms, 73.4MB)
테스트 2 〉 통과 (9.17ms, 73.1MB)
테스트 3 〉 통과 (11.96ms, 74.5MB)
테스트 4 〉 통과 (12.55ms, 79.2MB)
테스트 5 〉 통과 (13.34ms, 71.9MB)
테스트 6 〉 통과 (9.47ms, 76.7MB)
테스트 7 〉 통과 (10.61ms, 79.4MB)
테스트 8 〉 통과 (11.26ms, 80.9MB)
테스트 9 〉 통과 (10.78ms, 78.4MB)
테스트 10 〉 통과 (11.71ms, 81.6MB)
테스트 11 〉 통과 (11.14ms, 78.1MB)
테스트 12 〉 통과 (14.54ms, 73.1MB)
테스트 13 〉 통과 (9.73ms, 77.9MB)
테스트 14 〉 통과 (9.32ms, 78.9MB)
테스트 15 〉 통과 (11.28ms, 75.1MB)
테스트 16 〉 통과 (16.58ms, 80.1MB)
테스트 17 〉 통과 (11.99ms, 74.9MB)
테스트 18 〉 통과 (9.51ms, 77.7MB)
풀이:
- 문제에서 요구하는 사항은 주어진 my_string 문자열에서 s번 인덱스부터 e번 인덱스까지의 원소들을 뒤집으라는 것이다.
- 따라서 substring을 이용하여 s인덱스 전가지 추출하고 for문을 이용하여 e번 인덱스부터 s번 인덱스까지 감소하며 문자열에 추가.
- 그리고 e번 인덱스 이후에 문자열이 있을 경우를 가정하여 e+1번부터 추출하여 answer 문자열에 이어붙인다.
#2-1 코드 및 알고리즘
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
class Solution {
public String solution(String my_string, int s, int e) {
List<String> list = new ArrayList<>();
list.add(my_string.substring(0, s));
for(int i = e; i >= s; i--){
list.add(String.valueOf(my_string.charAt(i)));
}
list.add(my_string.substring(e + 1));
return list.stream().map(String::valueOf).collect(Collectors.joining());
}
}
-------------------------------------------
정확성 테스트
테스트 1 〉 통과 (2.68ms, 78.5MB)
테스트 2 〉 통과 (2.22ms, 78.2MB)
테스트 3 〉 통과 (2.05ms, 75.4MB)
테스트 4 〉 통과 (1.42ms, 77.3MB)
테스트 5 〉 통과 (1.91ms, 72.6MB)
테스트 6 〉 통과 (1.87ms, 77.8MB)
테스트 7 〉 통과 (2.04ms, 71.8MB)
테스트 8 〉 통과 (1.51ms, 72.7MB)
테스트 9 〉 통과 (1.93ms, 73.4MB)
테스트 10 〉 통과 (1.94ms, 72.4MB)
테스트 11 〉 통과 (4.17ms, 75.2MB)
테스트 12 〉 통과 (2.43ms, 72.1MB)
테스트 13 〉 통과 (2.52ms, 71.8MB)
테스트 14 〉 통과 (2.36ms, 70.9MB)
테스트 15 〉 통과 (1.90ms, 73.4MB)
테스트 16 〉 통과 (2.96ms, 77MB)
테스트 17 〉 통과 (1.44ms, 73.6MB)
테스트 18 〉 통과 (1.64ms, 80.1MB)
풀이2:
- 처음 알고리즘과 두 번째 알고리즘에서 큰 속도 차이를 볼 수 있었다.
- 이유는 String의 불변성 때문이다.
String은 참조 타입이라는데 이는 클래스라는 소리이기도하다.
코드 예제
public class Main {
public static void main(String[] args) {
String my_string = "Progra21Sremm3";
int s = 6, e = 12;
String answer = my_string.substring(0, s);
System.out.println(answer);
for(int i = e; i >= s; i--){
answer += my_string.charAt(i);
System.out.println(answer);
}
answer += my_string.substring(e + 1);
System.out.println(answer);
}
}
---------------------------------
출력결과
Progra // String answer = my_string.substring(0, s);
Program // for문 시작
Programm
Programme
Programmer
ProgrammerS
ProgrammerS1
ProgrammerS12 // for문 종료
ProgrammerS123 // answer += my_string.substring(e + 1);
'JAVA > 프로그래머스 코딩 기초 트레이닝' 카테고리의 다른 글
[프로그래머스, LV.0] qr code (0) | 2023.06.28 |
---|---|
[프로그래머스, LV.0] 세로 읽기 (0) | 2023.06.28 |
[프로그래머스, LV.0] 접두사인지 확인하기 (0) | 2023.06.28 |
[프로그래머스, LV.0] 접미사인지 확인하기 (0) | 2023.06.26 |
[프로그래머스, LV.0] 접미사 배열 (0) | 2023.06.23 |