직사각형 별 찍기
문제 설명
이 문제에는 표준 입력으로 두 개의 정수 n과 m이 주어집니다.
별(*) 문자를 이용해 가로의 길이가 n, 세로의 길이가 m인 직사각형 형태를 출력해보세요.
제한 조건
n과 m은 각각 1000 이하인 자연수입니다.
입력
5 3
출력
*****
*****
*****
작성 코드
import java.util.Scanner;
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(); // ④
}
}
}
코드 설명
별 찍기는 반복문을 학습하기에 가장 좋은 문제인 것 같다.
우선 출력된 결과를 보면 별이 찍힌 건 한 줄에 5개씩 총 3줄이 찍혀있고 입력된 값을 보면 a=5, b=3이다.
여기서 보면 a는 한 줄에 찍힌 별의 개수, b는 줄의 개수를 나타낸다고 유추해 낼 수 있다.
그럼 여기서 중복 for문을 사용하면 출력된 값과 동일하게 찍어낼 수 있다.
위 코드와 같이 중복 for문으로 작성해준다.
① 외부 for문은 줄의 개수인 b만큼 반복되도록 작성해주고 반복될 때마다 하나씩 증가한다.
② 내부 for문은 한 줄의 찍힌 별의 개수인 a만큼 반복도 록 작성해주고 반복될 때마다 하나씩 증가한다.
③ 내부 for문이 반복되면서 *이 찍히도록 System.out.print("*"); 로 출력되도록 작성해 준다.
④ 내부 for문을 빠져나와 개행을 위해 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()));
}
}