본문 바로가기
공부-코딩테스트/Java-코딩테스트-편의기능

배열값을 특정값으로 채우는 방법 Arrays.fill()

by 령과 2022. 8. 7.

자바로 static 변수를 활용해서 문제를 풀 경우 null과 ''가 output으로 봤을 때 차이가 없는 것에서 문제가 있었다.

https://www.acmicpc.net/problem/2447

 

2447번: 별 찍기 - 10

재귀적인 패턴으로 별을 찍어 보자. N이 3의 거듭제곱(3, 9, 27, ...)이라고 할 때, 크기 N의 패턴은 N×N 정사각형 모양이다. 크기 3의 패턴은 가운데에 공백이 있고, 가운데를 제외한 모든 칸에 별이

www.acmicpc.net

char[][] 2차원 배열로 ''을 먼저 채워야 했는데 이 과정을 빼고 문제가 생겼었다.

테스트를 할 때 '' 채우는 것을 빼도 결과는 똑같았기 때문에 원인을 알 수 없었는데 아스키코드를 찾아본 결과 다르더라...

 

이때 간단히 Arrays.fill(배열,'')을 사용하면 배열의 값들이 ''로 채워지게 된다.

 

사용 예시코드 ( ctrl + F : 적용코드 )

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;

public class Main {
	static char[][] table;

	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringBuilder sb = new StringBuilder();
		int input = Integer.parseInt(br.readLine());
		table = new char[input][input];
		for(int i = 0 ;i<input;i++) {
			Arrays.fill(table[i], ' ');    //적용코드
		}
		solution(input, 0, 0);
		for (int i = 0; i < table.length; i++) {
			for (int j = 0; j < table.length; j++) {
				sb.append(table[i][j]);
			}
			sb.append("\n");
		}

		System.out.println(sb);
	}

	static void solution(int size, int x, int y) {

		if (size == 3) {
			for (int i = x; i < x + 3; i++) {
				for (int j = y; j < y + 3; j++) {
					table[i][j] = '*';
				}
			}
			table[x + 1][y + 1] = ' ';
		} else {
			for (int i = x; i < x + size; i += (size / 3)) {
				for (int j = y; j < y + size; j += (size / 3)) {
					if (!((i == (x + (size / 3))) && (j == (y + (size / 3))))) {
						solution(size / 3, i, j);
					}
				}
			}
		}

	}


}

댓글