728x90

문제

도전케이스

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

결과

error Output size differs 라는 에러가 떴다. 알아보니깐 이 문제는 return을 하는 것이 아닌 log를 찍어 그대로 결과 값을 출력 해야한다. 즉 초기화때 알려준 console.log(a);처럼 log를 찍어야했던 문제이다.

풀이

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 str = "";
            for(let j = 0; j <  a; j++)
                {
                    str+=("*");
                }
            console.log(str);
        }
});

해설

B줄 만큼 별을 쌓아야하고, A만큼 쌓아야하기 때문에 2중 for문을 처음 떠올렸다. str 을 for문 안쪽에 돌려서 한줄을 표시하고 초기화 시켜줘야 한다. 안그러면 계속 별이 쌓여가면서 찍히기 때문! 2번째 for문에 왔을때 str에 += ("*"); 을 해주어서 별을 추가해주고 한줄이 완성되면 console.log(str);을 하여서 해당하는 별을 출력하고 다시 str을 초기화하는 식으로 반복하였다.

다른사람의 코드

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

});

a만큼 repeat을 해주는 것이기때문에 원하는 글자인 '*'.repeat(a)를 통해 row에 원하는 만큼 별을 추가해주고 그 row를 반복해서 b줄만큼 log를 남겨서 해결한 case다 repeat을 사용해서 불필요하게 row에 초기화를 반복할 필요가 없게 만들었고 더 깔끔하게 보이는 코드를 작성한 것 같다.