TIL | [알고리즘] 직사각형 별 찍기(Java)

hyemin·2022년 3월 11일
0

알고리즘

목록 보기
1/38
post-thumbnail

항해 알고리즘 주간 첫문제이다!

THINKING

  1. 별찍기를 n만큼 한다.
  2. 1)에서 찍은 별을 m만큼 다시 반복한다.
    -> 반복문 for을 사용하자

내 풀이

import java.util.Scanner;
 
class Solution {
    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.println("");
        }
    }
}

좋아요 많이 받은 풀이

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

배운 것

1. StringBuilder

기존 String은 String 변수에 또다른 String 변수로 연산을 하면 새로운 String이 생성하게된다.

이는 곧 메모리 해제와 메모리 할당을 발생시켜 복잡한 연산 과정을 거친다면 성능면에서 좋지 않다.

반면, StringBuilder는 문자열 연산시 새로운 객체를 생성하지 않고 기존 String 객체에 더하는 방식을 사용하여 메모리 성능면에서 부하가 적다.

사용법

StringBuilder sb = new StringBuilder();
/* 문자열 더하기 */
sb.append("가나다");
sb.append("abc");

/* 문자열 출력하기 */
System.out.println(sb.toSring());

2. IntStream

for, while, do-while 말고 더 간단한게 반복문을 사용할 수 있다.

사용법

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

IntStream.range가 1부터 6 사이의 integer를 stream에 보내고, 보내진 integer마다 실행시킬 명령을 forEach로 정의한다.

위에서는 1부터 6 사이의 integer를 한줄씩 출력한다.

1
2
3
4
5

range()의 두 번째 파라미터는 범위에 속하지 않는데, 속하게 하려면, rangeClosed()를 사용하면 된다.

IntStream.range(1, 5).forEach(System.out::println);
1
2
3
4
5

0개의 댓글

관련 채용 정보