본문 바로가기

프로그래머스 0단계 - 그림확대 본문

알고리즘/0단계

프로그래머스 0단계 - 그림확대

개발자로 거듭나기 2023. 6. 4. 17:31
반응형

0 단계 : 그림확대

코딩테스트 연습 > 코딩 기초 트레이닝 > 그림확대


직사각형 형태의 그림 파일이 있고, 이 그림 파일은 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는 다음과 같습니다.이를 가로 세로로 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........"]를 return 합니다.
  • ..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........
    
  • .xx...xx.
    x..x.x..x
    x...x...x
    .x.....x.
    ..x...x..
    ...x.x...
    ....x....
    


입출력 예 #2

  • 예제 2번의 picture는 다음과 같습니다.이를 가로 세로로 k배, 즉 3배 확대하면 그림 파일은 다음과 같습니다.따라서 ["xxx...xxx", "xxx...xxx", "xxx...xxx", "...xxx...", "...xxx...", "...xxx...", "xxx...xxx", "xxx...xxx", "xxx...xxx"]를 return 합니다.
  • xxx...xxx
    xxx...xxx
    xxx...xxx
    ...xxx...
    ...xxx...
    ...xxx...
    xxx...xxx
    xxx...xxx
    xxx...xxx
    
  • x.x
    .x.
    x.x
    

코드

function solution(picture, k) {
    // 가로 세로 전부 k배만큼 늘어나야 하는 것 같습니다.
    // .xx...xx의 경우 => .. xx xx .. .. .. xx xx (k=2 일경우)
    
    return picture.reduce((prev, curr) => {
        // ".xx...xx."일경우 배열로 만들어서 k번 반복해서 한 값을 만들어줍니다. => "..xxxx......xxxx..
        let row = curr.split('').reduce((innerPrev, innerCurr) => {
            innerPrev += innerCurr.repeat(k);
            return innerPrev;
        }, "");
        
        // 세로로도 늘어나야 하기때문에 k배 해줘야 합니다.
        for(let i = 0; i < k; i++) {
            prev.push(row);
        }
        return prev;
    }, []);
}

리뷰

1. picture.reduce를 통해 row 하나하나 마다 다시 reduce를 돌아서 innerCurr.repeat(k)를 통해서 k번 더 추가해줍니다.
2. row를 k배 만큼 확대 했으면 그 row를 k번 밑으로도 추가해줘야 합니다.
3. 최종적으로 만들어진 결과 return.

총평 : 가로세로 k만큼 더 추가해주면 되겠죠?


출처 : https://school.programmers.co.kr/learn/courses/30/lessons/181836
반응형
Comments