프로그래머스 Day 25 이차원 리스트(배열)

정수를 나선형으로 배치하기

💫문제 설명💫

양의 정수 n이 매개변수로 주어집니다.
n × n 배열에 1부터 n2 까지 정수를 인덱스 [0][0]부터 시계방향 나선형으로 배치한 이차원 배열을 return 하는 solution 함수를 작성해 주세요.

💫제한사항💫

1 ≤ n ≤ 30

💫입출력 ex💫

n result
4 [[1, 2, 3, 4], [12, 13, 14, 5], [11, 16, 15, 6], [10, 9, 8, 7]]
5 [[1, 2, 3, 4, 5], [16, 17, 18, 19, 6], [15, 24, 25, 20, 7], [14, 23, 22, 21, 8], [13, 12, 11, 10, 9]]

문제풀이

class Solution {
    public int[][] solution(int n) {
        int[][] answer = new int[n][n];
        int num = 1;
        int top = 0, bottom = n - 1, left = 0, right = n - 1;

        while (num <= n * n) {
            for (int i = left; i <= right; i++) {
                answer[top][i] = num++;
            }
            top++;

            for (int i = top; i <= bottom; i++) {
                answer[i][right] = num++;
            }
            right--;

            for (int i = right; i >= left; i--) {
                answer[bottom][i] = num++;
            }
            bottom--;

            for (int i = bottom; i >= top; i--) {
                answer[i][left] = num++;
            }
            left++;
        }

        return answer;
    }
}

특별한 이차원 배열 2

💫문제 설명💫

n × n 크기의 이차원 배열 arr이 매개변수로 주어질 때, arr이 다음을 만족하면 1을 아니라면 0을 return 하는 solution 함수를 작성해 주세요.
  0 ≤ i, j < n인 정수 i, j에 대하여 arr[i][j] = arr[j][i]

💫제한사항💫

1 ≤ arr의 길이 = arr의 원소의 길이 ≤ 100
1 ≤ arr의 원소의 원소 ≤ 1,000
모든 arr의 원소의 길이는 같습니다.

💫입출력 ex💫

arr result
[[5, 192, 33], [192, 72, 95], [33, 95, 999]] 1
[[19, 498, 258, 587], [63, 93, 7, 754], [258, 7, 1000, 723], [587, 754, 723, 81]] 0

문제풀이

class Solution {
    public int solution(int[][] arr) {
        int answer = 1;
        
        for(int i = 0; i<arr.length;i++){
            for(int j = 0; j<arr.length; j++){
                if(arr[i][j]!=arr[j][i]){
                    answer = 0;
                }
            }
        }
        return answer;
    }
}

정사각형으로 만들기

💫문제 설명💫

이차원 정수 배열 arr이 매개변수로 주어집니다.
arr의 행의 수가 더 많다면 열의 수가 행의 수와 같아지도록 각 행의 끝에 0을 추가하고,
 열의 수가 더 많다면 행의 수가 열의 수와 같아지도록 각 열의 끝에 0을 추가한 이차원 배열을 return 하는 solution 함수를 작성해 주세요.

💫제한사항💫

1 ≤ arr의 길이 ≤ 100
1 ≤ arr의 원소의 길이 ≤ 100
  arr의 모든 원소의 길이는 같습니다.
1 ≤ arr의 원소의 원소 ≤ 1,000

💫입출력 ex💫

arr result
[[572, 22, 37], [287, 726, 384], [85, 137, 292], [487, 13, 876]] [[572, 22, 37, 0], [287, 726, 384, 0], [85, 137, 292, 0], [487, 13, 876, 0]]
[[57, 192, 534, 2], [9, 345, 192, 999]] [[57, 192, 534, 2], [9, 345, 192, 999], [0, 0, 0, 0], [0, 0, 0, 0]]
[[1, 2], [3, 4]] [[1, 2], [3, 4]]

문제풀이

class Solution {
    public int[][] solution(int[][] arr) {
        int max = Math.max(arr.length, arr[0].length);
        int[][] answer = new int[max][max];
        
        for(int i=0; i < arr.length; i++) {
            // (복사할 배열, 시작 위치, 저장 대상, 시작 위치, 복사 개수) 
            System.arraycopy(arr[i], 0, answer[i], 0, arr[i].length);
        }
        return answer;
    }
}

이차원 배열 대각선 순회하기

💫문제 설명💫

2차원 정수 배열 board와 정수 k가 주어집니다.
i + j <= k를 만족하는 모든 (i, j)에 대한 board[i][j]의 합을 return 하는 solution 함수를 완성해 주세요.

💫제한사항💫

1 ≤ board의 길이 ≤ 100
1 ≤ board[i]의 길이 ≤ 100
  1 ≤ board[i][j] ≤ 10,000
  모든 board[i]의 길이는 같습니다.
0 ≤ k < board의 길이 + board[i]의 길이

💫입출력 ex💫

board k result
[[0, 1, 2],[1, 2, 3],[2, 3, 4],[3, 4, 5]] 2 8

문제풀이

class Solution {
    public int solution(int[][] board, int k) {
        int answer = 0;
        
        for(int i=0; i < board.length; i++) {
            for(int j=0; j < board[i].length; j++) {
                if(i + j <= k) {
                    answer += board[i][j];
                }
            }
        }
        return answer;
    }
}

Categories:

Updated:

Leave a comment