CODING TEST/programmers

Day1 - 문자열 반복해서 출력하기

iamyuunzo 2025. 7. 8. 09:09

📌 문제 정보

- 문제 이름 : 코딩 기초 테스트 - 문자열 반복해서 출력하기

- 문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/181950

 

 

📌 문제 요약

핵심 조건: 문자열 str이 n번 반복된 문자열을 만들어 출력하는 코드 작성

- 제한: 1 ≤ str의 길이 ≤ 10, 1 ≤ n ≤ 5

 

 

📌 내 풀이 및 코드

import java.util.Scanner;

public class Solution {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String str = sc.next();
        int n = sc.nextInt();
        String result = "";
        int i;
        
        for(i=1; i<=n; i++) {
            result += str;
        }
        
        System.out.print(result);
    }
}

- 틀렸었음. 출력문에 (str * n) 이라고 썼는데 String 타입은 * 연산자를 못 쓴다고 함.

- 어떤 방법이 있는지 힌트로 찾아봤고, for로 이어 붙이거나 StringBuilder를 사용하라고 했는데 StringBuilder 방식을 몰랐음.

 

📌 다른 사람들 풀이

//0
String result = "";

for (int i = 1; i <= n; i++) {
     result += str;
}

//1
System.out.println(str.repeat(n));

//2
StringBuilder sb = new StringBuilder();
for(int i=0; i<n; i++){
    sb.append(str);
}
String s = sb.toString();
System.out.println(s);

//3
for(int i=0;i<n;i++){
    System.out.print(str);
}

<-- 다른 풀이 요약 -->

- 0 : 내 코드에서 최대한 줄여본 것. (for문 안에 i를 바로 선언할 수 있음!)

- 1 : 코드가 제일 짧고 가독성이 좋음. (하지만 String의 .repeat(n) 메서드는 Java 11이상부터 사용 가능)

- 2 : += 형식보다 훨씬 빠르고 repeat 못 쓰는 환경에서도 안전하며 실무에서 가장 많이 쓰는 패턴임.

(System.out.println 내부에서 문자열로 바꿔주기 때문에 System.out.println(sb); 로 해도 됨.)

- 3 : String 자체를 변수에 모아두지 않고 바로바로 출력하기 때문에 메모리를 거의 안 씀. (변수 저장 필요 없을 때 유용)

  내 코드 repeat() (1번) StringBuilder (2번) System.out.print 반복 (3번)
실행 결과 동일 동일 동일 동일
속도 느림 (+= 연산) 빠름 빠름 빠름
메모리 새 문자열 계속 생성 내부 최적화 메모리 버퍼 재사용 거의 안 씀
가독성 보통 최고 (한 줄) 좋음 짧고 직관
버전 제한 없음 Java 11 이상 없음 없음
실무 적합성 조건에 따라 가능
 



📌 새로 배운 문법

<-- 이번 문제에서 새로 배운 Java 문법 정리 -->

** Java11의 repeat() 함수 **

- Java 11에서 새로 추가된 String 메서드로, 문자열을 원하는 횟수만큼 반복해서 이어 붙여줌.

- 파라미터 0 => 빈 문자열 반환 / 파라미터 음수 => IllegalArgumentExceptionthrow 에러 반환 / 파라미터 1 => 지정 문자열 반환

- String result = str.repeat(n); (str = 반복할 문자열, n = 반복 횟수 (양수))

String s = "Hi!";
System.out.println(s.repeat(3)); // 결과: Hi!Hi!Hi!

 

 

**StringBuilder 사용법 **

- String 객체끼리 더할 때 덧셈 연산이 많아지면 메모리 할당과 해제를 발생시켜 성능적으로 좋지 않음.
(많은 문자열을 연결하면 많은 중간 문자열 객체가 생성되어 비효율적인 코드가 생성됨. -> 한 번 생성되면 내용 변경 불가)

- 그래서, 문자열을 효율적으로 여러 번 이어 붙일 때 쓰는 도구로 사용!! (문자열 덧붙이기에 특화된 도구)

- StringBuilder는 내부에 메모리 버퍼(공간)을 만들기 때문에 이어 붙일 때마다 새로 만들지 않고 버퍼에 덧붙임.

- append() = 덧붙이기 / toString() = 완성된 문자열로 변환

StringBuilder sb = new StringBuilder();

sb.append("Hello");
sb.append(" ");
sb.append("World");

System.out.println(sb.toString()); // Hello World