본문 바로가기
개발/개발 공부

[프로그래머스] 코딩테스트 입문 : 문자 반복 출력하기

by 하모예 2024. 9. 4.

| 문제

문자열 my_string과 정수 n이 매개변수로 주어질 때,

my_string에 들어있는 각 문자를 n만큼 반복한 문자열을 return 하도록

solution함수를 완성해 보세요.

| 제한 사항

  • 2 ≤ my_string의 길이 ≤ 5
  • 2 ≤ n ≤ 10
  • "my_string"은 영어 대소문자로 이루어져 있습니다.

| 입출력 예

my_string n result
hello 3 hhheeellllllooo

| 풀이 1

가상 심플하게 구성된 코드입니다. 

문자열을 문자열 배열로 쪼개고, answer 변수에 반복하여 += 해주었습니다.

public String solution01(String my_string, int n) {
    String answer = "";
    String[] arr = my_string.split("");
    for(int i = 0 ; i < arr.length ;i++){
        answer += arr[i].repeat(n);
    }
    return answer;
}

 

| 풀이 2

my_string을 자르는 방식은 동일하지만, StringBuilder를 사용했습니다.

StringBuilder의 append 메소드를 사용하면

문자열에 복합대입연산을 하는 것보다 상대적으로 속도가 빠른 편입니다.

public String solution02(String my_string, int n) {
    StringBuilder sb = new StringBuilder();
    String[] arr = my_string.split("");
    for(int i = 0 ; i < arr.length ;i++){
        sb.append(arr[i].repeat(n));
    }
    return sb.toString();
}

| 해설

문자 반복 출력하기 문제를 풀기 위해서는 우선 문자열을 배열로 만들어야 합니다.

Java에서 문자열을 배열로 만들기 위해서는 2가지 정도의 방법이 있는데요.

split을 사용하는 방법과 toCharArray를 사용하는 방법입니다.

split을 사용하면 String형태의 데이터를 String[] 즉, 문자열 배열로 쪼개주고,

toCharArray를 사용하면 String을 char[] 즉, 문자 배열로 잘라줍니다.

char[]이든, String[]이든 여기서는 단순 조회만 할 거라 문제가 되지는 않아요.

 

그러나 풀이에서는 toCharArray를 사용하지 않았습니다. 

왜냐면 제가 작성한 풀이에서 배열을 구성하는 방법만 toCharArray로 바꾸었을 뿐인데

0.12ms정도 걸렸던 케이스가 8.01ms까지 느려졌기 때문이에요. 

아주 단순하게 수학적으로만 계산하면 약 60배 정도 차이가 나게 됩니다.

"hello"처럼 짧은 단어도 이렇게 차이가 나는데 더 긴 문자열이 주어지면 어떻게 될지 무섭기까지 하네요.

toCharArray는 split이 기억나지 않을 때만 쓰기로 해요~

댓글