직사각형 별찍기 | 프로그래머스

Wonkook Lee·2021년 7월 25일
0

JS Coding Test | Level 1

목록 보기
1/20
post-thumbnail

처음 도전해보는 자바스크립트 코딩테스트,
생소한 형식의 문제에 당황했지만 열심히 적응중이다.
목표는 할 수 있는 최대한 단순한 코드를 만들기,
목표를 위해 다양한 방법을 사용해보기 🧑🏻‍💻

문제 풀러 가기

직사각형 별찍기 (Lv.1)


문제

이 문제에는 표준 입력으로 두 개의 정수 n과 m이 주어집니다.
별(*) 문자를 이용해 가로의 길이가 n, 세로의 길이가 m인 직사각형 형태를 출력해보세요.

제한 조건

n과 m은 각각 1000 이하인 자연수입니다.

예시

입력

5 3

출력

*****
*****
*****
process.stdin.setEncoding('utf8');
process.stdin.on('data', data => {
    const n = data.split(" ");
    const a = Number(n[0]), b = Number(n[1]);
    console.log(a);
    console.log(b);
});

풀이

풀이 (1) : Nested Loops

process.stdin.setEncoding('utf8');
process.stdin.on('data', data => {
    const n = data.split(" ");
    const a = Number(n[0]), b = Number(n[1]);
    for (let i = 0; i < b; i++) {
      let row = "";
      for (let j = 0; i < a; i++) {
        row += '*';
      };  
    };
});

중첩된 반복문. 내부 반복문은 가로줄을 구성하고, 외부 반복문은 가로줄을 m번 복사한다. 반복문이 두번 실행될 필요가 있을까?

풀이 (2) : Break Nesting (padEnd)

process.stdin.setEncoding('utf8');
process.stdin.on('data', data => {
    const n = data.split(" ");
    const a = Number(n[0]), b = Number(n[1]);
    for (let i = 0; i < b; i++) {
      console.log("*".padEnd(a, "*"));
    };
});

문자열을 원하는 길이만큼 특정 문자로 채워주는 padEnd 메소드를 사용하여 가로줄을 구성
padStart를 사용해도 무방하다

풀이 (3) : while Loop

process.stdin.setEncoding('utf8');
process.stdin.on('data', data => {
    const n = data.split(" ");
    const a = Number(n[0]), b = Number(n[1]);
    let c = b
    while (c) {
        console.log("*".padEnd(a, "*"));
        c--;
    };
});

for 대신 while을 사용하여 반복문의 조건을 간결하게 하고자 했다. 대신 b 값을 Mutable variable에 재할당하는 것이 비효율적이다.

풀이 (4) : repeat

process.stdin.setEncoding('utf8');
process.stdin.on('data', data => {
    const n = data.split(" ");
    const a = Number(n[0]), b = Number(n[1]);
    const row = '*'.repeat(a)
    for(let i =0; i < b; i++){
        console.log(row)
    };
});

padEnd, padStart 대신 repeat 메소드로 가로줄을 구성한 방법

profile
© 가치 지향 프론트엔드 개발자

0개의 댓글