문제
문자들이 담겨있는 배열 arr가 주어집니다. arr의 원소들을 순서대로 이어 붙인 문자열을 return 하는 solution함수를 작성해 주세요.
제한사항
- 1 ≤ arr 의 길이 ≤ 200
- arr 의 원소는 전부 알파벳 소문자로 이루어진 길이가 1인 문자열입니다.
class Solution {
public String solution(String[] arr) {
StringBuilder answer = new StringBuilder();
for(String str : arr) {
answer.append(str);
}
return answer.toString();
}
}
StringBuilder 객체를 생성해서 해결한 위의 코드의 경우 결과는 아래와 같이 나온다.
좀 더 짧게 써보겠다고 아래와 같이 사용하면 시간이 좀 더 걸리는 코드가 되어버린다.
class Solution {
public String solution(String[] arr) {
return String.join("", arr);
}
}
arr의 String 값들을 ""를 구분자로 하나의 문자열로 합쳐준다.
String 클래스는 읽을 수만 있고 변경이 불가능하다. 따라서 + 연산자를 통해 새롭게 문자열을 만들려고 하면 새로 만들어진 문자열이 담긴 String 클래스의 인스턴스가 생성되면서 속도저하가 생긴다. 또한 + 연산자로 n개의 문자열을 연결하려고 한다면, 시간은 n^2 에 비례한다고 한다.
String.join 메서드도 위와 비슷한 이유에서 속도저하가 발생하는게 아닌가 싶다.
문자열을 연결하는 측면에서는 굉장히 편하지만 앞으로는 지양해야겠다.
그리고 String.join 메서드는 java8 에만 존재하는 메서드라고 한다. 이 또한 참고해야겠다.
출처
https://school.programmers.co.kr/learn/courses/30/lessons/181941