public class Q6 {
public static void main(String[] args) {
int[][] 첫번째밭 = {
{1, 0, 0, 0, 0},
{0, 0, 1, 0, 1},
{0, 0, 1, 0, 1},
{0, 0, 1, 0, 1},
{0, 0, 1, 0, 1}
};
int[][] 두번째밭 = {
{0, 0, 0, 0, 1},
{0, 0, 0, 0, 3},
{0, 0, 0, 0, 4},
{0, 2, 0, 0, 2},
{4, 5, 0, 2, 0}
};
solution(첫번째밭, 두번째밭);
}
public static void solution(int[][] 첫번째밭, int[][] 두번째밭) {
int len = 첫번째밭.length;
int[][] sample = new int[len][len];
for (int i = 0; i < len; i++) {
for (int j = 0; j < len; j++) {
sample[i][j] = 두번째밭[j][len - 1 - i];
sample[i][j] += 첫번째밭[i][j];
}
}
for (int i = 0; i < len; i++) {
String str = "";
for (int j = 0; j < len; j++) {
str += sample[i][j];
}
System.out.println((char)Integer.parseInt(str, 8));
}
}
}
1. 문제 파악
- 텃밭의 비밀을 알아내기 위해 우선, 밭의 방향을 동일하게 맞춰야 하기 때문에 오른쪽으로 회전한 밭을 다시 왼쪽으로 돌려야 합니다.
- 두 배열의 값을 더하거나 빼는 등의 사칙연산을 해서 유의미한 값이 나오는지 확인해야 합니다.
- 0부터 7까지의 값이기 때문에 배열의 값은 8진수의 값을 나타냄을 알 수 있습니다.
- 정수의 값만으로는 힌트를 얻기 힘들기 때문에 아스키 코드로 바꿔 문자 값을 얻어야 합니다.
2. 풀이
- 합을 구하기 위해 주어진 밭과 동일한 크기의 이차원 배열을 선언합니다. 회전을 위해 배열의 길이를 변수 len 값으로 미리 초기화해줍니다.
int len = 첫번째밭.length;
int[][] sample = new int[len][len];
- 두 번째 밭을 왼쪽으로 회전한 값을 구하고 이 값을 첫 번째 배열의 값과 더해줍니다.
for (int i = 0; i < len; i++) {
for (int j = 0; j < len; j++) {
sample[i][j] = 두번째밭[j][len - 1 - i];
sample[i][j] += 첫번째밭[i][j];
}
}
- 8진수를 10진수로 변환함과 동시에 아스키 코드로 인코딩합니다.
for (int i = 0; i < len; i++) {
String str = "";
for (int j = 0; j < len; j++) {
str += sample[i][j];
}
System.out.println((char)Integer.parseInt(str, 8));
}