JAVA

Java - programmers - Level1 직사각형 별찍기 - IntStream이 뭐야?

yangcotton 2021. 5. 26. 15:01

문제 설명 : 이 문제에는 표준 입력으로 두 개의 정수 n과 m이 주어집니다.

별(*) 문자를 이용해 가로의 길이가 n, 세로의 길이가 m인 직사각형 형태를 출력해보세요.

 

제한조건 : 

  • n과 m은 각각 1000 이하인 자연수입니다.
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();
        
           for (int i = 0; i < b; i++){
            for(int j = 0; j < a; j++){
                System.out.print("*");
            }
            System.out.println();
        }

    }
}

 

직사각형 별 찍기는 초반에 코딩 배우면서 하는 거라 포스팅을 안 하려 했는데

프로그래머스 다른 분들 답안을 보니 IntStream이 있었다. 

처음 보는 것이라 찾아보니 Java8에 등장한 것인 듯.. 바로 공부 ㄱㄱ

 

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

IntStream도 import 해줘야 한다.

 

 

 for (int i = 1 ; i <= 10 ; i++) {
            System.out.println(i);
        }

이 코드를 

IntStream.range(1, 11).forEach(System.out::println);

이렇게 표현 가능하다.

 

그래서 상황에 따라 반복문이 필요할 때 사용하면 코드가 깔끔해져서 좋지만

for문과 완전히 똑같지는 않다.

예를 들어 break를 걸 때

 

 public void for_break() {
        for (int i = 1 ; i <= 5 ; i++) {
            if (i == 3) {
                break;
            }
            System.out.println(i);
        }
    }

 

이럴 경우 결과는

1
2

이렇게 나오지만

 

public void intStream_range_break() {
        IntStream.range(1, 6).forEach(i -> {
            if (i == 3) {
                return;
            }
            System.out.println(i);
        });
    }

 

이렇게 IntSteam으로 한다면 결과는 비슷할 것 같지만

 

1
2
4
5

결과는 3을 제외한 숫자가 출력된다. 3만 return 했을 뿐 끝까지 흘러가기 때문이다.

 

필요에 따라 사용하면 될 것 같다.

 

 

***추가***

번외로 IntStream.range만 있는 건 아니고 몇 개 더 있는데

 

IntStream.of(1,2,3,4,5);  //1,2,3,4,5에 대한 int스트림 생성, of의 인자는 배열 등도 가능

IntStream.range(1,6); //1,2,3,4,5에 대한 int 스트림 생성

IntSteam.rangeClosed(1,5); //1,2,3,4,5에 대한 int 스트림 생성

 

 

***추가***

for문처럼 IntStream의 결과를 내려면

1
2
public void intStream_range_break() {
        IntStream.range(1, 6).forEach(i -> {
            if (i >= 3) {
                return;
            }
            System.out.println(i);
        });
    }

 

이렇게 3 이상에서 return을 시켜주면 결과는 같게 나온다.

완전 같은 식을 만들려면

public void intStream_range_break() {
        try {
			IntStream.range(1, 6).forEach(i -> {
				if (i == 3) {
					throw new RuntimeException("stop");
				}
				System.out.println(i);
			});
		} catch (RuntimeException e) {
			// do nothing
		}
    }

이렇게 코드를 짜면 된다. 

'JAVA' 카테고리의 다른 글

Java - programmers - Level1 홀수와짝수  (0) 2021.05.18