Bleeding edge

[프로그래머스] 직사각형 별찍기 - 자바스크립트 0606 본문

코딩테스트 공부

[프로그래머스] 직사각형 별찍기 - 자바스크립트 0606

codevil 2022. 6. 6. 02:41

문제 설명

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

제한 조건

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

https://programmers.co.kr/learn/courses/30/lessons/12969

 

코딩테스트 연습 - 직사각형 별찍기

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

programmers.co.kr

초기에 프로그래머스에 주어진 식이랑 다르게 process.stdin이라고, 백준에서 문제를 풀이할 때 자주 보던 글자들이 있어서 처음에 당황했다. 

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

process.stdin과 같이 function에 변수를 대입하는 식이 아닌 경우에는, console.log로 정답을 제출해야 했다.

우선 위에서 주어진 문제를 풀기 위해서는 a, b를 각각 new Array를 이용하여 값을 받아서 2차원으로 붙여주었다.

 let answer = new Array(b).fill(new Array(a).fill("*"))

테스트케이스를 5 3으로 준다면

[
  [ '*', '*', '*', '*', '*' ],
  [ '*', '*', '*', '*', '*' ],
  [ '*', '*', '*', '*', '*' ]
]

다음과 같은 값이 나온다. 이를 답과 같게 만들기 위해서는 join을 두번사용해야한다. 우선

    let answer = new Array(b).fill(new Array(a).fill("*").join(""))
    	[ '*****', '*****', '*****' ]

이렇게 떨어져있는, *들을 한곳에 모아주었다. 그리고 마무리로 엔터를 하여 별을 배치시키기 위해 .join('\n')을 붙인다.

process.stdin.setEncoding('utf8');
process.stdin.on('data', data => {
    const [a,b] = data.split(" ").map((v)=>Number(v));
    let answer = new Array(b).fill(new Array(a).fill("*").join("")).join("\n")
    console.log(answer)
});

문제 자체는, array와 map, join을 이용하여 심플하게 풀이를 하였지만, stdin의 사용법을 몰라서 10분정도를 추가로 더 소요하였다.