코드 저장소

공부에는 끝이 없다!

JAVA/코딩 테스트

백준 문제 풀이 - 반복문 단계

VarcharC2K 2023. 8. 9. 17:04

반복문 역시 아직은 브론즈 단계라 그런지 크게 어려운 것은 없었다.

대부분 for문 while문을 사용하여 끝내면 되는 문제들이였고 해당 조건만 잘 맞춰주면 크게 문제 없이 풀 수 있었다.

 

생각이 필요했던 문제는

2439번 -별찍기 2 (브론즈 4) 였는데

어떤 방법으로 할지 고민하다가 다음과 같이 코드를 구현하였다.

import java.util.*;
import java.io.*;

class Main{
    public static int n;
    public static String s="";
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        n = Integer.parseInt(br.readLine());

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

            for (int j = 1; j <= n - i; j++) {
                s += " ";
            }

            for (int k = 1; k <= i; k++) {
                s+="*";
            }

            bw.write(s);
            bw.newLine();
            bw.flush();
            s= "";
        }

        bw.close();
        br.close();
    }
}

전체 출력할 행만큼 for을 돌리는데 행값 - 현재행만큼 공백을 추가하고 행 번호 만큼 *을 추가하여 만들어진 문자열을 출력하는 방식으로 구현하였다.

 

String의 repeat를 사용하여 구현할 수도 있는 문제였는데 다시 생각해보면 단일 for문을 사용하는 repeat 방식이 더 좋지 않았나 생각해 본다.

다음은 repeat로 구현했을때의 코드이다.

 

for(int i = 1; i <= n; i++) {
            System.out.println(" ".repeat(n - i) + "*".repeat(i));
        }

코드를 보면 로직 자체는 동일한데 공백 (" ")을 입력 받은 행의 - i만큼 출력하고 "*"문자를 i만큼 반복하는 형태이다.

단일 for문을 사용하는 만큼 속도면에서 좀 더 좋지 않았을까 생각해 본다.