본문 바로가기
Java/알고리즘

[프로그래머스/알고리즘] 직사각형 별찍기 (자바/Java)

by 전재경 2022. 11. 18.

문제 설명

이 문제에는 표준 입력으로 두 개의 정수 n과 m이 주어집니다.
별(*) 문자를 이용해 가로의 길이가 n, 세로의 길이가 m인 직사각형 형태를 출력해보세요.

 

 

제한 조건

  • n과 m은 각각 1000 이하인 자연수입니다.

 

 

Step1. 문제분석

 

우선 출력대로 만드는 것에는 문제가 없었다.

 

하지만 입력을 받고 그 값을 만드는 것에 대한 고민이 있었다.

 

일반적으로 가로5 세로3의 직사각형 별찍기를 하려면

 

        for(int i = 0; i < 3 ; i++){
            for(int j = 0; j < 5; j++){
                System.out.print('*');
            }
            System.out.print('\n');
            //System.out.println(' '); 으로도 가능
            }

 

이렇게 하면 된다.

 

하지만 여기서 입력값을 받는대로 값을 바꾸려면 ?

 

생각보다 간단했다.

 

정수가 들어간 부분만 입력받은 n,m값이 들어가면 되는 문제였고

 

Step2. 문제풀이 코드

import java.util.Scanner;

public class Main {
    public static void main(String[] args)  {

        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int m = sc.nextInt();

        for(int i = 0; i < m ; i++){
            for(int j = 0; j < n; j++){
                System.out.print('*');
            }
            System.out.print('\n');
            //System.out.println(' '); 으로도 가능
        }

    }

}

 

Step3. 다른 사람의 풀이 코드

 

 

import java.util.Scanner;
import java.util.stream.IntStream;

public class Solution {
    public static void main(String[] args) {
        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()));
    }
}

같은 문제를 푸는데 코드가 너무 달라서 다른 문제 혹은 다른 언어인줄 알았다.

 

아직 stream에 대한 이해도 부족하고 관련해서 잘 이해를 못하겠다,,,

찾아봐도 아직 이해하지 못한 부분이라 조금 더 공부해서 이런 방식으로도 푸는 법을 공부해봐야겠다.

 

댓글