🔎

답안

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. 문제 파악

  1. 텃밭의 비밀을 알아내기 위해 우선, 밭의 방향을 동일하게 맞춰야 하기 때문에 오른쪽으로 회전한 밭을 다시 왼쪽으로 돌려야 합니다.
  1. 두 배열의 값을 더하거나 빼는 등의 사칙연산을 해서 유의미한 값이 나오는지 확인해야 합니다.
  1. 0부터 7까지의 값이기 때문에 배열의 값은 8진수의 값을 나타냄을 알 수 있습니다.
  1. 정수의 값만으로는 힌트를 얻기 힘들기 때문에 아스키 코드로 바꿔 문자 값을 얻어야 합니다.

2. 풀이

  1. 합을 구하기 위해 주어진 밭과 동일한 크기의 이차원 배열을 선언합니다. 회전을 위해 배열의 길이를 변수 len 값으로 미리 초기화해줍니다.
    1. int len = 첫번째밭.length; int[][] sample = new int[len][len];
       
  1. 두 번째 밭을 왼쪽으로 회전한 값을 구하고 이 값을 첫 번째 배열의 값과 더해줍니다.
    1. 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]; } }
       
  1. 8진수를 10진수로 변환함과 동시에 아스키 코드로 인코딩합니다.
    1. 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)); }