📕 문제 설명
직사각형 형태의 그림 파일이 있고, 이 그림 파일은 1 × 1 크기의 정사각형 크기의 픽셀로 이루어져 있습니다. 이 그림 파일을 나타낸 문자열 배열 picture과 정수 k가 매개변수로 주어질 때, 이 그림 파일을 가로 세로로 k배 늘린 그림 파일을 나타내도록 문자열 배열을 return 하는 solution 함수를 작성해 주세요.
⭐ 제한사항
- 1 ≤ picture의 길이 ≤ 20
- 1 ≤ picture의 원소의 길이 ≤ 20
- 모든 picture의 원소의 길이는 같습니다.
- picture의 원소는 '.'과 'x'로 이루어져 있습니다.
- 1 ≤ k ≤ 10
💻 입출력 예
picture | k | result |
[".xx...xx.", "x..x.x..x", "x...x...x", ".x.....x.", "..x...x..", "...x.x...", "....x...."] | 2 | ["..xxxx......xxxx..", "..xxxx......xxxx..", "xx....xx..xx....xx", "xx....xx..xx....xx", "xx......xx......xx", "xx......xx......xx", "..xx..........xx..", "..xx..........xx..", "....xx......xx....", "....xx......xx....", "......xx..xx......", "......xx..xx......", "........xx........", "........xx........"] |
["x.x", ".x.", "x.x"] | 3 | ["xxx...xxx", "xxx...xxx", "xxx...xxx", "...xxx...", "...xxx...", "...xxx...", "xxx...xxx", "xxx...xxx", "xxx...xxx"] |
📚 입출력 예 설명
입출력 예 #1
- 예제 1번의 picture는 다음과 같습니다.
.xx...xx.
x..x.x..x
x...x...x
.x.....x.
..x...x..
...x.x...
....x....
이를 가로 세로로 k배, 즉 2배 확대하면 그림 파일은 다음과 같습니다.
..xxxx......xxxx..
..xxxx......xxxx..
xx....xx..xx....xx
xx....xx..xx....xx
xx......xx......xx
xx......xx......xx
..xx..........xx..
..xx..........xx..
....xx......xx....
....xx......xx....
......xx..xx......
......xx..xx......
........xx........
........xx........
따라서 ["..xxxx......xxxx..", "..xxxx......xxxx..", "xx....xx..xx....xx", "xx....xx..xx....xx", "xx......xx......xx", "xx......xx......xx", "..xx..........xx..", "..xx..........xx..", "....xx......xx....", "....xx......xx....", "......xx..xx......", "......xx..xx......", "........xx........", "........xx........"]를 return 합니다.
입출력 예 #2
- 예제 2번의 picture는 다음과 같습니다.
입출력 예 #3
- 예제 3번의 a, b는 각각 0, 0이고 0 + 0 = 0입니다. 따라서 "0"을 return 합니다.
x.x
.x.
x.x
이를 가로 세로로 k배, 즉 3배 확대하면 그림 파일은 다음과 같습니다.
xxx...xxx
xxx...xxx
xxx...xxx
...xxx...
...xxx...
...xxx...
xxx...xxx
xxx...xxx
xxx...xxx
따라서 ["xxx...xxx", "xxx...xxx", "xxx...xxx", "...xxx...", "...xxx...", "...xxx...", "xxx...xxx", "xxx...xxx", "xxx...xxx"]를 return 합니다.
😊 나의 답변
function solution(picture, k) {
let start = 0, end = k;
let answer = new Array(picture.length * k);
const arr = picture.map((v) => [...v].map((val) => val.repeat(k)).join(''));
for(let i = 0; i < arr.length; i++) {
answer.fill(arr[i], start, end);
start += k;
end += k;
}
return answer;
}
answer라는 이름의 picture의 길이 * k
길이의 빈 배열을 생성했다.
repeat()
을 활용해서 picture 배열의 요소 내부 문자열의 각각의 글자를 k번 반복하게 했고, 생성된 배열을 arr 변수에 담아주었다.
그리고 for문을 통해 arr의 요소들을 fill()
을 사용해 answer에 채워주었다.
📌 repeat()
: 문자열을 지정된 횟수만큼 반복하여 새로운 문자열을 반환하는 자바스크립트의 문자열 메서드
📌 fill()
: 배열의 모든 요소를 지정된 값으로 채우는 배열 메서드. 배열을 특정 값으로 초기화하거나 일부 요소를 교체할 때 유용하게 사용한다.
📌 참고할 답변
function solution(picture, k) {
let answer = [];
picture.forEach((v) => {
const expanded = [...v].reduce((acc, curr) => acc + cur.repeat(k), '');
for(let i = 0; i < k; i++) answer.push(expanded);
});
return answer;
}
function solution(picture, k) {
return picture.flatMap((p) => Array(k).fill([...p].map((c) => c.repeat(k)).join('')));
}
너무 간단명료해... 분발하자..! 👍
'프로그래머스 > Lv. 0 코딩 기초 트레이닝' 카테고리의 다른 글
[프로그래머스] Lv.0 정사각형으로 만들기 / JS (0) | 2023.08.08 |
---|---|
[프로그래머스] Lv.0 정수를 나선형으로 배치하기 / JS (0) | 2023.08.08 |
[프로그래머스] Lv.0 두 수의 합 / JS (0) | 2023.08.07 |
[프로그래머스] Lv.0 배열의 원소 삭제하기 / JS (0) | 2023.08.06 |
[프로그래머스] Lv.0 배열의 길이를 2의 거듭제곱으로 만들기 / JS (0) | 2023.08.05 |