문자열 반복 메서드 repeat

0

TIL

목록 보기
111/126

길이가 n이고, "수박수박수박수...."와 같은 패턴을 유지하는 문자열을 리턴하는 함수, solution을 완성하세요. 예를들어 n이 4이면 "수박수박"을 리턴하고 3이라면 "수박수"를 리턴하면 됩니다.

문자열 반복을 위해 바로 생각난 것은 for문을 사용해 StringBuilder로 반복 붙이는 것이었다.

public class Test_21_Watermelon {
    public String solution(int n) {
        StringBuilder answer = new StringBuilder();
        if (n % 2 == 0) {
            for (int i = 0; i < n / 2; i++) {
                answer.append("수박");
            }
        } else {
            for (int i = 0; i < n / 2; i++) {
                answer.append("수박");
            }
            answer.append("수");
        }
        return answer.toString();
    }
}

실행은 됐는데 for문에 `String.repeat()`으로 바꾸기 밑줄이 들어온 것을 확인했다.

궁금해서 찾아보니 자바 11에서 추가된 String 메서드 중 하나로, 주어진 횟수만큼 반복한다고한다.

public class Test_21_Watermelon {
    public String solution(int n) {
        StringBuilder answer = new StringBuilder();
        answer.append("수박".repeat(Math.max(0, n / 2)));
        if (n % 2 != 0) {
            answer.append("수");
        }
        return answer.toString();
    }
}

공통적으로 n의 1/2배만큼 '수박'을 반복하고, n이 홀수인 경우에만 '수'를 뒤에 붙여서 해결한다.
인텔리제이 똑또케


문자열 붙이기에 대해 검색해보던 중 여러가지 방법들 중 눈에 띄던 내용들이 있었는데
'+' 연산자와 'StringBuilder'를 사용하는 것 중 여러 게시글에서 서로 다른 것을 사용하는 것이 좋다 라는 글들이 많이 보였다.

조금 더 찾아보니 일반적으로 작은 문자열을 연결하는 경우에는 '+' 연산자를 사용해도 성능상 큰 문제가 되지 않지만,
문자열 연결이 반복되거나 큰 문자열을 다룰 때는 StringBuilder를 사용하는 것이 좋다고한다.
그리고 문자열 연결 성능이 중요한 경우에는 StringBuilder나 StringBuffer를 활용하여 성능을 최적화할 수 있다.


문제 풀이 후 다른사람의 풀이를 보던 중 상상하지도 못한 풀이를 발견하였다.

class Solution {
    String text = "수박수박수... ...박수박수박";
  public String solution(int n) {
      String answer = text.substring(0, n);
      return answer;
  }
}

제한조건에 있는 'n은 길이 10,000이하인 자연수입니다.'를 이용한 풀이로
String text를 여기서는 생략해두었지만 실제 코드에는 '수박수박수...' 이렇게 1만개가 쓰여져있다.
substring 하나만으로 바로 해결할 수 있는 방법이라 신기해서 가져와봤다.

0개의 댓글