항해 알고리즘 주간 첫문제이다!
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()));
}
}
기존 String은 String 변수에 또다른 String 변수로 연산을 하면 새로운 String이 생성하게된다.
이는 곧 메모리 해제와 메모리 할당을 발생시켜 복잡한 연산 과정을 거친다면 성능면에서 좋지 않다.
반면, StringBuilder는 문자열 연산시 새로운 객체를 생성하지 않고 기존 String 객체에 더하는 방식을 사용하여 메모리 성능면에서 부하가 적다.
사용법
StringBuilder sb = new StringBuilder();
/* 문자열 더하기 */
sb.append("가나다");
sb.append("abc");
/* 문자열 출력하기 */
System.out.println(sb.toSring());
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