[프로그래머스] Lv.0 그림 확대

Dev.Dana·2024년 10월 19일
0

Algorithm

목록 보기
4/25
post-thumbnail

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

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

문제 해결 전략

1.	가로 확장: 주어진 문자열을 한 문자씩 확인 후, 해당 문자를 k번 반복하여 가로로 확장
2.	세로 확장: 가로 확장된 문자열을 k번 반복하여 세로로 확장
3.	반복 처리: 이 과정을 모든 행에 대해 반복

제출 코드

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++){
            StringBuilder sb = new StringBuilder();
            for (char c : picture[i].toCharArray()){
                for (int j=0; j<k; j++){
                    sb.append(c); 
                }   
            }

            String expendRow = sb.toString();
            for (int j=0; j<k; j++){
                answer[idx++] = expendRow;
            }
        }
        return answer;
    }
}

세로 확장은 반복문으로 element를 여러번 출력하면 됐지만 가로 확장은 String 배열이었기 때문에 char로 쪼개준 후 k번 반복하여 늘려야한다.

  • repeat함수가 생각나서 코드를 새로 작성해보았다.
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++) {
            String expandedRow = "";
            for (char c : picture[i].toCharArray()) {
                expandedRow += String.valueOf(c).repeat(k);
            }

   
            for (int j = 0; j < k; j++) {
                answer[idx++] = expandedRow;
            }
        }

        return answer;
    }
}

=> repeat함수는 String 클래스의 메서드기 때문에
String.valueOf(c).repeat(k) 이런식으로 일단 char를 String으로 변환한 후 사용할 수 있다.

profile
어제의 나보단 나은 오늘의 내가 되기를

0개의 댓글