ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [프로그래머스 - LEVEL 1/JAVA] 직사각형 별찍기
    코딩테스트/문제풀이 2021. 9. 10. 16:47

    문제 설명

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

     

     

    제한 조건

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

     

    예시

    입력

    5 3

    출력

    *****
    *****
    *****

     

     

    문제풀이

     

    나의 풀이

    비교적 간단하게 푼 문제로, 이중포문을 작성하여 풀었다.

    외부 for문에서는 줄바꿈이 되도록 하였고 내부 for문에서는 줄마다 찍힐 별을 추가하였다.

    import java.util.Scanner;
    
    public class Solution {
        public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
            int a = sc.nextInt();
            int b = sc.nextInt();
    
            String star = "";
            for (int i = 0; i < b; i++) {
                for (int j = 0; j < a; j++) {
                    star += "*";
                }
                star += "\n";
            }
            
            System.out.println(star);
        }
    }

     

    다른사람의 풀이

    별을 출력할 때, String 클래스 대신

    비교적 문자열 추가/삭제/변경 등에 유리한 StringBuilder 클래스를 사용하였다.

    또한 반복을 for문을 사용한 것이 아닌 IntStream을 통해 Stream 처리하여 결과를 도출하였다.

     

    그리고 나의 풀이처럼 별을 담을 변수에 완성된 별을 저장하고 출력하는 것이 아닌

    한줄의 별을 완성 한 뒤, 그 별이 담긴 변수를 줄 길이 만큼 반복출력하였다.

    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()));
        }
    }

    * StringBuilder : 객체가 불변하는 String에 비해 내부적으로 가변크기 배열을 이용하기에 문자열 변경에 유리

    * IntStream : 외부반복으로 작성되는 for문과 달리 내부반복을 진행하여 반복을 Stream으로 처리

    * IntStream.range(x, y) : x이상 y미만까지의 정수를 참조하여 Stream 처리

     

Designed by Tistory.