본문 바로가기

프로그래머스 - 코딩테스트

[Java][프로그래머스] - LVL.0 문자 반복 출력하기


정답 1

이번 문제는 생각보다 풀이에 대한 아이디어가 잘 떠오르지 않았다. 생각보다 고전했던 문제였다.

지금 현재 나는 숫자 타입의 배열에 대해서는 어느정도 이해를 하고 문제 답안에 대한 구상을 수월하게 하지만 String, char[] 배열 관련해서는 너무나도 고전하고 있다. 

해서 정답 1의 나의 답안은 상당히 처참했다. 그래도 열심히 로직을 구성해보았다.

class Solution {
    public String solution(String my_string, int n) {
        char[] arr = my_string.toCharArray();
        String[] answer = new String[my_string.length()];
        for(int i = 0; i < my_string.length(); i++) {
            String target = String.valueOf(arr[i]);
            String make = "";
            for(int j = 0; j < n; j++) {
                make += target;
            }
            answer[i] = make;
        }
        String result = String.join("", answer);
        return result;
    }
}

코드가 너무 길고 깔끔하지 못하다. 우아한 멋있는 코드가 아니다..

하지마 정답은 맞다. 

일전에 선행된 문제들중 String 을 가지고 놀았던 문제가 있었다. 나는 거기서 StringBuilder 라는것을 사용해 보았다.

그리고서는 글 마지막에 StringBuilder 는 String 값을 가지고 놀기에 최고라고 언급을 하였다. 그것은 여기서도 통하는 말이었다.

정답 2에서 살펴보도록 하자.


정답 2

class Solution {
    public String solution(String my_string, int n) {
        StringBuilder sb = new StringBuilder();
        for(char c : my_string.toCharArray()){
            sb.append((c + "").repeat(n));
        }
        return sb.toString();
    }
}

StringBuilder 를 사용하지 코드가 너무도 깔끔해졌다.

먼저 StringBuilderappend() 메서드를 사용해서 원하는 String 값을 붙여넣을 수 있다.

StringBuilder sb = new StringBuilder();
sb.append("abc");
sb.append("def");
sb.append("ghi");
// 표준출력시 : abcdefghi 이렇게 출력됨.

정답 2 에서 sb.append((c + "")) 를 한 이유는 char 타입인 c 를 String 값으로 바꿔주기 위한 것이다. 그리고 StringBuilder 의 메서드인 repeat(n) 을 통해 원하는 만큼 append() 메서드를 반복시켰다. 이렇게 되면 문자를 원하는 만큼 반복시키는 결과가 나온다.

 

도출된 결과를 toString() 을 통해 StringBuilder -> String 타입으로 변경해준뒤 반환하였다.

 

StringBuilder, 꼭 잊지말고 String 관련 문제에서 기억해 사용해보도록 하자.