[프로그래머스][Java] 문자열 곱하기 (Lv.0)

박현아·2024년 10월 8일
0

programmers-java

목록 보기
7/35

👩‍💻 문제

🙋‍♀️ 답변

class Solution {
    public String solution(String my_string, int k) {
        String answer = "";
        
        for(int i=0; i<k; i++) {
            answer += my_string;
        }
        
        return answer;
    }
}

🤔

나는 간단하게 k번 반복해서 답을 출력했지만 성능이 더 나은 풀이가 있어서 정리해보려고 한다.

StringBuilder 사용

이전에 StringBuilder를 써본 적이 없지만 코테를 풀 때 유용할 것 같다.

class Solution {
    public String solution(String my_string, int k) {
        StringBuilder sb = new StringBuilder();
        
        for (int i=0; i<k; i++) {
            sb.append(my_string);
        }
        
        return sb.toString();
    }
}

또 다른 간단한 풀이

문자열 n번 반복하기 : str.repeat(n)

class Solution {
    public String solution(String my_string, int k) {
        return my_string.repeat(k);
    }
}

세 답변의 시간 복잡도

1. 첫 번째 방법 answer += my_string;

문자열을 반복적으로 추가할 때마다 새로운 문자열 객체가 생성됩니다. Java의 String은 불변(immutable) 객체이기 때문에, 매번 새로운 문자열을 만들고 기존의 문자열을 복사해야 합니다. 이로 인해 시간 복잡도가 O(n * k)로 증가할 수 있습니다.

2. 두 번째 방법 sb.append(my_string);

StringBuilder는 내부적으로 가변 배열을 사용하여 문자열을 저장합니다. 문자열을 추가할 때 기존의 내용을 수정하기 때문에 새로운 객체를 생성할 필요가 없습니다. 따라서 이 방법은 O(k)로 더 효율적입니다.

3. 세 번째 방법 my_string.repeat(k):

이 메서드는 내부적으로 최적화되어 있어, 문자열을 반복하는 작업을 매우 효율적으로 수행합니다. 문자열을 반복하는 데 필요한 메모리 할당과 문자열 결합을 최적화합니다.
성능적으로 O(n * k)와 비슷하지만, 최적화 덕분에 직접 StringBuilder를 사용하는 것과 유사한 성능을 보여줄 수 있습니다.

0개의 댓글