본문 바로가기
Baekjoon

[Java/Algorithm] Java11에 추가된 String 메소드 repeat()로 코드 단축하기

by dev_haha 2023. 11. 10.

백준2439 - 별찍기-2

여느때 처럼 별찍기 문제를 다중 for문으로 해결하여

제출을 했는데,

상위권 제출자들의 소스코드를 보니 repeat()메소드를 사용하여  한 번의 for문으로 해결하고 있었다!

Repeat

  • Java11에 추가된 String 메소드 repeat
  • String 문자열을 주어진 파라미터의 횟수만큼 반복한다.
  • 파라미터를 0으로 지정하면 빈 문자열을 반환한다.
  • 파라미터를 음수로 지정하면 IllegalArgumentExceptionthrow 에러를 반환한다.
  • 파라미터를 1로 지정하면 문자열을 그대로 반환한다.
  • 내부적으로 Arrays.fill()과 System.arraycopy()메소드를 호출하여 새 문자열을 만든다.

출처: https://www.javastring.net/java/string/java-string-repeat-method

https://www.javastring.net/java/string/java-string-repeat-method

 

Java String repeat() Method

Java String repeat() method returns a new string whose value is the concatenation of this string given number of times.

www.javastring.net

 


import java.io.*;

public class Main
{	
	public static void main(String[] args) throws IOException
	{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		StringBuilder sb = new StringBuilder();
		
		int N = Integer.parseInt(br.readLine());
		for (int i = 1; i <= N; i++)
		{
			for (int j = N-i; j > 0; j--)
			{
				sb.append(" ");
			}
			for (int j = 1; j <= i; j++)
			{
				sb.append("*");
			}
			sb.append("\n");
		}
		
		bw.write(sb.toString());
		br.close();
		bw.flush();
		bw.close();
	}
	
}

다중 for문을

repeat을 사용하여 아래와 같이 바꿀 수 있다.

import java.io.*;

public class Main
{	
	public static void main(String[] args) throws IOException
	{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		StringBuilder sb = new StringBuilder();
		
		int N = Integer.parseInt(br.readLine());
		for (int i = 1; i <= N; i++)
		{
			sb.append(" ".repeat(N-i));
			sb.append("*".repeat(i));
			sb.append("\n");
		}
		
		bw.write(sb.toString());
		br.close();
		bw.flush();
		bw.close();
	}
	
}

코드 단축과 가독성이 높아졌다.

 

하지만 내가 설치한 자바는 1.8이기 때문에 사용할 수 없돠...