본문 바로가기
코딩테스트/자바 Level 0

[Java] 문자 리스트를 문자열로 변환하기

by onggury 2023. 7. 31.

문제

문자들이 담겨있는 배열 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