그림 확대

nacSeo (낙서)·2024년 3월 21일
0

프로그래머스

목록 보기
132/169

문제 설명

직사각형 형태의 그림 파일이 있고, 이 그림 파일은 1 × 1 크기의 정사각형 크기의 픽셀로 이루어져 있습니다. 이 그림 파일을 나타낸 문자열 배열 picture과 정수 k가 매개변수로 주어질 때, 이 그림 파일을 가로 세로로 k배 늘린 그림 파일을 나타내도록 문자열 배열을 return 하는 solution 함수를 작성해 주세요.

제한사항

1 ≤ picture의 길이 ≤ 20
1 ≤ picture의 원소의 길이 ≤ 20
모든 picture의 원소의 길이는 같습니다.
picture의 원소는 '.'과 'x'로 이루어져 있습니다.
1 ≤ k ≤ 10

나의 코드

class Solution {
    public String[] solution(String[] picture, int k) {
        int row = picture.length;
        int col = picture[0].length();
        
        int newRow = row * k;
        int newCol = col * k;
        
        String[] answer = new String[newRow];
        
        for(int i=0; i<newRow; i++) {
            StringBuilder sb = new StringBuilder();
            for(int j=0; j<newCol; j++) {
                sb.append(picture[i/k].charAt(j/k));
            }
            answer[i] = sb.toString();
        }
        return answer;
    }
}

다른 사람 코드

class Solution {
    public String[] solution(String[] picture, int k) {
        String[] answer = new String[picture.length * k];
        int idx = 0;

        for(int i=0; i<picture.length; i++) {
            for(int j=0; j<k; j++) {
                StringBuilder sb = new StringBuilder();

                for(int l=0; l<picture[i].length(); l++) {
                    sb.append(String.valueOf(picture[i].charAt(l)).repeat(k));
                }

                answer[idx++] = sb.toString();
            }
        }

        return answer;
    }
}

느낀 점

행을 반복하는 건 반복문을 통해 해결할 수 있는데 열을 반복하는 로직이 생각보다 어려웠다. 나의 코드 중 핵심은 sb.append(picture[i/k].charAt(j/k));를 이해하는 것이다.
picture[i/k]는 주어진 k 중 몇 번째 행인지를 나타내고,
이 것의 charAt(j/k)는 해당 행의 주어진 k 중 몇 번째 열인지 나타낸다.
그리고 문자열이 빈번하게 추가되므로 성능상 유리한 StringBuilder를 사용해주었다.

다른 사람 코드를 보면 결과 인덱스를 따로 지정하고 열과 행 반복문을 valueOf(), repeat() 함수 등을 사용하여 직접 돌려 결과를 도출하는 방법도 존재했다.

profile
백엔드 개발자 김창하입니다 🙇‍♂️

0개의 댓글