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

febCho·2024년 3월 21일
0

코딩테스트

목록 보기
117/253
post-thumbnail

문제

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

- 제한사항

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

풀이

처음에는 문제가 이해가 잘 가지 않았다. 예제를 찬찬히 뜯어 보니 String[] picture요소들 하나하나도 k배(가로), 전체 개수도 k배(세로) 하면 되는 문제라는 것을 알게 되어 다음과 같이 풀이했다.

k라는 미지의 수에 대응하기 위해서는 가변적으로 요소를 추가할 수 있는 List 객체를 활용해야 한다고 생각했다. for문을 돌며 split()으로 요소인 문자열을 나누어 문자열 배열 String[] width에 담은 뒤, 이중 for문으로 repeat(k)로 k배 늘어난 문자열을 만들어준다.

그다음 해당 문자열을 또 k만큼 반복해 List 객체에 담아준다. 이렇게 가로, 세로 k배 늘어난 문자열 배열 picture의 요소들을 반환 타입에 맞게 toArray()을 이용해 문자열 배열로 변환하여 반환한다.

import java.util.ArrayList;
import java.util.List;

class Solution {
    public String[] solution(String[] picture, int k) {
        List<String> answer = new ArrayList<>();
        
        for(int i=0;i<picture.length;i++){
            String[] width = picture[i].split("");
            String str = "";
            
            for(int j=0;j<width.length;j++){
                str += width[j].repeat(k);
            }
            
            for(int s=0;s<k;s++){
                answer.add(str);
            }
        }
        
        return answer.toArray(new String[answer.size()]);
    }
}

결과

profile
Done is better than perfect.

0개의 댓글