본문 바로가기
Coding Test/Java Coding Test

[프로그래머스 / 자바] - 그림 확대

by nam_ji 2024. 8. 22.

그림 확대 - LV. 0

문제

  • 문자열 배열 picture와 정수 k가 매개벼수로 주어집니다. 
  • 직사각형 형태의 그림 파일이 있고,
  • 이 그림 파일은 1X1 크기의 정사각형 크기의 픽셀로 이루어져 있습니다.
  • 이 그림 파일을 매개변수를 이용해 나타내고,
  • 이 그림 파일을 가로 세로로 k 배 늘린 그림 파일을 나타낸 문자열 배열을 출력하는 문제입니다.
  • 입출력 예
    • 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"
      ]


테스트 (인텔리제이)

  • 가로로 k만큼 추가한 배열을 위해 temp 배열을 picture의 선언해줍니다.
  • 가로로 k만큼 추가하기 위해 for문으로 picture의 크기만큼 순회하여 picture의 원소를 꺼낼 수 있도록 합니다.
  • 다음 for문으로 picture의 원소 문자열의 문자 하나하나 k만큼 추가해야 하기 떄문에 picture의 원소 크기만큼 순회하도록 합니다.
  • 다음 for문으로 문자를 k만큼 추가할 수 있게 k만큼 순회할 수 있도록 해줍니다.
  • 배열을 초기화 해주면 null 값이 들어가 있기 때문에 첫 번째 for문에 각 인덱스를 빈 값으로 초기화 해주고
  • 세 번째 for문에서 temp의 각 인덱스 값에 picture의 원소를 문자로 나눠 k만큼 추가할 수 있도록 해줬습니다.
  • 이제 세로를 k만큼 추가할 수 있도록 해줄 생각입니다.
  • 마지막에 출력될 문자열 배열 answer를 pictrue의 크기 곱하기 k한 만큼의 크기로 선언해줍니다.
  • 첫 번째 for문은 answer의 크기만큼 순회하도록 하고
  • 두 번째 for문은 k만큼 순회하도록 해줍니다.
  • 두 번째 for문에는 answer의 인덱스 번호는 첫 번째 for문의 루프 위치 값을 넣어주고 해당 원소는 temp의 원소를 k만큼 추가할 수 있도록 첫 번째 for문의 루프 위치 값에 k를 나눈 몫 값을 temp의 인덱스 번호로 설정하여 문제를 해결했습니다.
package com.namji.codingtest;

import java.util.Arrays;

public class 그림_확대 {
  public static void main(String[] args) {
    /*
    문자열 배열 picture와 정수 k가 매개벼수로 주어집니다.
    직사각형 형태의 그림 파일이 있고,
    이 그림 파일은 1X1 크기의 정사각형 크기의 픽셀로 이루어져 있습니다.
    이 그림 파일을 매개변수를 이용해 나타내고,
    이 그림 파일을 가로 세로로 k 배 늘린 그림 파일을 나타낸 문자열 배열을 출력하는 문제입니다.

    입출력 예
    picture
    [
    ".xx...xx.",
    "x..x.x..x",
    "x...x...x",
    ".x.....x.",
    "..x...x..",
    "...x.x...",
    "....x...."]

    [
    "x.x",
    ".x.",
    "x.x"]

    k
    2
    3

    result
    [
    "..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........"]

    [
    "xxx...xxx",
    "xxx...xxx",
    "xxx...xxx",
    "...xxx...",
    "...xxx...",
    "...xxx...",
    "xxx...xxx",
    "xxx...xxx",
    "xxx...xxx"]
     */

    String[] picture = {
        "x.x",
        ".x.",
        "x.x"
    };
    int k = 3;
    String[] temp = new String[picture.length];

    for (int i = 0; i < picture.length; i++) {
      temp[i] = "";
      for (int j = 0; j < picture[i].length(); j++) {
        for (int l = 0; l < k; l++) {
          temp[i] += picture[i].charAt(j);
        }
      }
    }

    String[] answer = new String[picture.length * k];

    for (int i = 0; i < answer.length; i++) {
      for (int j = 0; j < k; j++) {
        answer[i] = temp[i / k];
      }
    }

    System.out.println(Arrays.toString(answer));
  }
}

프로그래머스 코드

import java.util.*;

class Solution {
    public String[] solution(String[] picture, int k) {
        String[] temp = new String[picture.length];
        
        for (int i = 0; i < picture.length; i++) {
            temp[i] = "";
            for (int j = 0; j < picture[i].length(); j++) {
                for (int l = 0; l < k; l++) {
                    temp[i] += picture[i].charAt(j);
                }
            }
        }
        
        String[] answer = new String[picture.length * k];
        
        for (int i = 0; i < answer.length; i++) {
            for (int j = 0; j < k; j++) {
                answer[i] = temp[i / k];
            }
        }
        
        return answer;
    }
}