문제
이 문제에는 표준 입력으로 두 개의 정수 n과 m이 주어집니다.
별(*) 문자를 이용해 가로의 길이가 n, 세로의 길이가 m인 직사각형 형태를 출력해보세요.
제한 조건
n과 m은 각각 1000 이하인 자연수입니다.
입력
5 3
출력
문제 풀이
process.stdin.setEncoding('utf8');
process.stdin.on('data', data => { //입력받은 data를 'data'에 저장
const n = data.split(" "); //data에 접근하여 문자열 공백 앞뒤로 분리하여 n이라는 변수에 저장(저장값:5,3)
const a = Number(n[0]), b = Number(n[1]); //n의 첫번째 배열을 문자화하여 a에 저장, n의 두번째 배열을 문자화하여 b에 저장
for(let i=0; i < b; i++){ //b는 3이므로 i가 2가 될 때 까지 반복
let star = ''; //문자열을 star에 저장. 0부터 2까지 돌았으므로 *****가 세로로 세번 생긴다.
for(let k=0; k < a; k++){ //a는 5이므로 k가 4가 되었을 때 까지만 반복.
star = star + '*'; //star에 *를 저장, 0-4까지 돌면 총 *이 5개가 가로로 생성된다.
} // 중괄호 닫고 종료
console.log(star); //star값(*****)을 찍어준다.
} //종료하고 윗 for문으로 돌아가 i가 2가 될 때 까지 반복
});
for문 안에 for문이 있는 중첩 for문을 사용했다.
사실 도저히 모르겠어서 2시간 동안 고민하다가 같이 공부하는 팀원의 코드를 참고하였다. 이해하느라 머리 터질 뻔 했다.
console.log()는 한 번 실행이 끝나면 줄 바꿈을 하므로 가로로 먼저 반복한 후 세로로 다시 반복하여 진행하는 형태.
첫 for문이 시작되면 밖에 있는 for문이 시작이 되어 세로줄 첫 번째를 실행하기 위한 for문이 시작되고, 안쪽의 for문으로 넘어가서 star라는 변수안에 *가 5번 쌓인 후 안쪽의 for문이 끝나면 console.log로 넘어와서 세로 첫줄이 출력되고 그 다음 밖의 for문이 다시 실행되는 logic.
이해하느라 머리 터질 뻔 했다....