Link
문제
예제를 보고 규칙을 유추한 뒤에 별을 찍어 보세요.
입력 > 첫째 줄에 N(1 ≤ N ≤ 100)이 주어진다.
출력 > 첫째 줄부터 2×N-1번째 줄까지 차례대로 별을 출력한다.
| 예제 입력
3
| 예제 출력
*
**
***
**
*
제출
const fs = require("fs");
const input = Number(
process.platform === "linux" ? fs.readFileSync("/dev/stdin").toString() : `3`
);
let result1 = [];
let result2 = [];
for (let i = 1; i <= input; i++) {
result1.push(" ".repeat(input - i) + "*".repeat(i));
}
result2 = result1.slice().reverse().slice(1);
console.log(result1.concat(result2).join("\n"));
풀이과정
이번 문제는 다른 분의 풀이를 보고 풀어본 문제!
중심을 기준으로 상하 반전이기 때문에 반복될 부분은 for문을 사용하여 배열에 저장하고,
나머지 부분은 저장한 배열을 뒤집어서 기존 배열과 합쳐준다.
reverse()를 사용하면 원본 배열이 변경되기 때문에 slice()로 얕은 복사를 해줘야한다.
개념
String.prototype.repeat()
- 문자열을 지정한 횟수만큼 반복해 새로운 문자열을 반환한다.
- 반복 횟수는 0보다 큰 양의 정수이며, 최대 문자열 크기를 넘으면 RangeError 발생
Array.prototype.slice()
- 배열에서 괄호 안에 지정한 시작점부터 끝지점까지 복사하여 새로운 배열 객체를 반환한다.
- 원본 배열은 바뀌지 않는다.
- 매개변수
- 첫 번째 인자 : begin
- 잘라내기 할 시작점
- begin이 undefined인 경우, 0번 인덱스부터 slice 된다.
- begin이 배열의 길이보다 클 경우 빈 배열이 반환된다.
- 두 번째 인자 : end
- 잘라내기를 끝낼 종료지점
- end 인덱스는 제외하고 추출된다.
- ex) arr.slice(1,4) 의 경우, arr[1]~arr[3]까지 추출
- end가 생략될 경우 배열의 끝까지 slice 된다.
- 첫 번째 인자 : begin
Array.prototype.reverse()
- 배열의 순서를 반전한다.
- 마지막 요소는 첫 번째 요소가 되고, 첫 번째 요소는 마지막 요소가 된다.
Array.prototype.concat()
- 매개변수에 있는 배열 또는 값을 호출한 배열 뒤에 순서대로 붙여 새로운 배열을 반환한다.
유사한 문제
Comment
'Algorithm > Baekjoon' 카테고리의 다른 글
[백준] 10991: 별 찍기 - 16 (javascript) (0) | 2022.11.30 |
---|---|
[백준] 2446: 별 찍기 - 9 (javascript) (0) | 2022.11.30 |
[백준] 2445: 별 찍기 - 8 (javascript) (0) | 2022.11.30 |
[백준] 2442: 별 찍기 - 5 (javascript) (0) | 2022.11.24 |
[백준] 2441: 별 찍기 - 4 (javascript) (0) | 2022.11.24 |