문자열 my_string과 정수 n이 매개변수로 주어질 때, my_string에 들어있는 각 문자를 n만큼 반복한 문자열을 return 하도록 solution 함수를 완성해보세요.
코드
class Solution {
public String solution(String my_string, int n) {
String[] strArray = my_string.split("");
String answer = "";
for(String tmp : strArray){
for(int i=1; i<=n; i++){
answer += tmp;
}
}
return answer;
}
}
단순하게 생각하면 String을 모두 이어 붙이면 된다. String answer 변수에는 String들이 합쳐진 형태의 값에 대한 참조값이 할당되지만, 각각의 String은 모두 각각의 값을 지니고 heap 영역에 존재하게 된다. 때문에 연산 과정에서 더 많은 메모리를 사용하게 된다. 따라서 String을 이어붙여서 update 할수록 더 많은 메모리를 차지한다.
class Solution {
public String solution(String my_string, int n) {
String[] strArray = my_string.split("");
StringBuilder sb = new StringBuilder();
for(String tmp : strArray){
for(int i=1; i<=n; i++){
sb.append(tmp);
}
}
String answer = sb.toString();
return answer;
}
}
하지만 StringBuilder는 다르다. 이 친구는 해당 String에 바로 값을 붙여주면서, 공간이 부족한 경우 자동으로 늘어난다고 한다. 따라서 String 각각이 메모리를 차지하지 않을 수 있어서 낭비도 적고, 연산 속도도 빨라진다. 대신 공간을 계속해서 늘려주는 과정이 동반되는 것 때문에 효율이 떨어질 수는 있으나, 필요하다면 애초에 그 크기를 정해서 형성해주면 된다고 한다. 비슷한 친구로 StringBuffer가 있다. 2
연산 속도를 보면 아주 큰 차이를 보이는 것을 확인할 수 있다.
Footnote
'코딩테스트 공부 > 프로그래머스' 카테고리의 다른 글
[Coding Test : Java] Lv.0 : 문자열 뒤집기 (0) | 2023.03.16 |
---|---|
[Coding Test : Java] Lv.0 : 최빈값 구하기 (0) | 2023.03.16 |
[Coding Test : Java] Lv.0 : 중앙값 (0) | 2023.03.15 |
[Coding Test : Java] Lv.0 : 배열 두 배 만들기 (0) | 2023.03.15 |
[Coding Test : Java] Lv.0 : 분수의 덧셈 (0) | 2023.03.15 |
댓글