개발자/프로그래머스

[프로그래머스] JAVA_직사각형 별 찍기

푸루닉 2023. 4. 17. 23:51

https://school.programmers.co.kr/learn/courses/30/lessons/12969

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


import java.util.Scanner;

public class programmer_3 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int a = sc.nextInt();
        int b = sc.nextInt();
        for(int i = 0; i < b; i++) {
            for (int j = 0; j < a; j++){
                System.out.print("*");
            }
            System.out.println();
        }
    }


}

굉장히 굉장히 쉬운문제지만 가로 세로를 헷갈려서 헤맬수도 있다.

이 문제를 풀고 올리는 이유는 StringBuilder로 풀어서 올린 분이 계시기 때문이다.

        Scanner sc = new Scanner(System.in);
        int a = sc.nextInt();
        int b = sc.nextInt();

        StringBuilder sb = new StringBuilder();
        IntStream.range(0, a).forEach(s -> sb.append("*"));
        IntStream.range(0, b).forEach(s -> System.out.println(sb.toString()));

** 코드 설명

해당 코드는 Java 8부터 제공되는 Stream API를 이용하여 직사각형을 출력하는 방법이다.

먼저, Scanner 클래스를 이용해 정수 a와 b를 입력받는다.

그리고 StringBuilder 클래스를 이용해 문자열을 "동적"으로 생성한다. StringBuilder 클래스는 String과 유사하지만 문자열을 변경 가능한 클래스이다.

IntStream 클래스의 range 메소드를 이용하여 a와 b만큼의 범위를 생성한다.. range 메소드는 시작 인덱스와 끝 인덱스를 지정하여 범위를 생성한다.

그리고 forEach 메소드를 이용하여 각각의 범위마다 실행될 로직을 정의한 후 sb.append("*")는 StringBuilder 객체 sb에 * 문자를 추가하는 로직이다.

System.out.println(sb.toString())은 StringBuilder 객체 sb를 문자열로 변환하여 출력하는 로직입이다.

따라서, 위 코드는 입력으로 받은 a와 b를 이용하여 가로 방향으로 a개의 별(*)을 가지고 세로 방향으로 b줄의 직사각형을 출력한다.

예를 들어, 입력으로 "5 3"을 주면 다음과 같이 출력될 것 이다.

 

StringBuilder로 활용하는 방법인데 append와  toString을 이용하여 반복을 돌리는 점이 인상 깊다.