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

·2025년 9월 8일

코딩테스트

목록 보기
2/16

[level 0] 문자 반복 출력하기 - 120825

문제 링크

문제 설명

문자열 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

  • "hello"의 각 문자를 세 번씩 반복한 "hhheeellllllooo"를 return 합니다.

✅나의 문제 풀이

class Solution {
    public String solution(String my_string, int n) {
        String answer = "";
        for(int i = 0; i<my_string.length(); i++){
            answer += String.valueOf(my_string.charAt(i)).repeat(n);
        }
        return answer;
    }
}
  • 단순하게 String 문자열인 answer에 n만큼 repeat()함수를 이용해서 n번 만큼 문자열을 이어붙인걸 더하는 방식으로 했는데, 이런 문자열을 이어붙이는 방법은 효율이 안좋다...ㅠㅠ 그걸 풀땐 몰랐지.....

📌String.repeat(int count)

  • 해당 문자열을 count번 이어붙인 새 String을 반환하는 메서드
  • count가 0이면 빈문자열 ""을 반환
  • count가 음수이면 IllegalArgumentException 던짐.
  • 반환 값은 새로운 String 이므로, 반복해서 많이 호출하면 임시 객체가 여러개 만들어진다 -> 성능/메모리 측면에서 비효율적일 수 있음!

✅참고할 문제 풀이

1. StringBuilder + toCharArray + repeat


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를 활용한 문제풀이이다.
  • toCharArray() : 해당 문자열의 문자들을 새로운 char[] 배열로 복사해서 반환하는 메서드
  • sb.append((c + "").repeat(n)) : c는 char이므로 빈 문자열 ""을 더하면 자바가 char를 String으로 바꿔서 새로운 String을 만들고, repeat()메서드를 이용해서 문자열을 n번 이어붙인 새로운 String을 반환
  • 한번 변환하는데 총 2개의 새로운 String 객체를 만든다..-> 비효율적..?

2. 보완 코드

class Solution {
    public String solution(String my_string, int n) {
        StringBuilder sb = new StringBuilder(my_string.length() * n);
        for (char c : my_string.toCharArray()) {
            for (int i = 0; i < n; i++) sb.append(c);
        }
        return sb.toString();
    }
}
  • toCharArray를 사용하는건 똑같지만, 임시 String을 생성안하는 코드이다.
  • for문을 두개써서 StringBuilder 객체에 문자열을 붙여나가는 방식이다.
profile
배우고 기록하며 성장하는 백엔드 개발자입니다!

0개의 댓글