코딩테스트 공부
[프로그래머스] 직사각형 별찍기 - 자바스크립트 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분정도를 추가로 더 소요하였다.