TIL) 코딩 기초 트레이닝

2024. 12. 19. 19:12코딩테스트 리뷰(프로그래머스)/코딩 기초 트레이닝 with Java

Day 25 이차원 리스트(배열)

 

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

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

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;
    }
}

 

풀이 방법

더 쉽고 간단하게 하려다가 머리가 엉켜서 한시간을 넘게 고민하다가 다른 것도 진행해야 된다 생각해서 찾아보았다.

 

일단 각 배열의 위, 아래, 오른쪽, 왼쪽을 만들어두고, 각 방향으로 진행을 시도 한다고 생각하면된다.

 

처음으로 왼쪽에서 오른쪽으로 진행을 하면서 가장 위에 이기 때문에 answer[top] 을 사용한다.

->

 

오른쪽 끝에 도달하면 이제 위에서 아래로 진행을 한다. 오른쪽 부분을 작성하기 때문에 answer[i][right]을 사용한다.

V

 

오른쪽 맨 아래 도달하면 오른쪽에서 왼쪽으로 진행을 하고 밑에 작성이 되기 때문에 answer[bottom]을 사용한다.

<-

 

마지막 과정으로 왼쪽 맨 아래에서 위로 진행을 한다.

왼쪽에 작성되기 때문에 answer[i][left]을 사용한다.

^

 

 

[프로그래머스] Lv.0 정수를 나선형으로 배치하기.java

출처: 프로그래머스 코딩 테스트 연습, https://school.programmers.co.kr/learn/challenges

velog.io

 

 

2) 특별한 이차원 배열2

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

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

 

풀이 방법

해당 문제는 단순하게 별 출력하는 것을 생각하면 좋을듯 싶다.

 

****

 ***

  **

   *

이런 모양의 별을 찍어야된다고 생각하면 된다.

 

 

3) 정사각형으로 만들기

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

class Solution {
    public int[][] solution(int[][] arr) {
        int[][] answer = arr.length > arr[0].length ? new int[arr.length][arr.length] : new int[arr[0].length][arr[0].length];
        
        for( int i = 0; i < arr.length; i++ ) {
            for( int j = 0; j < arr[0].length; j++ ) {
                answer[i][j] = arr[i][j];
            }
        }       
        
        
        return answer;
    }
}

 

풀이 방법

int 배열은 초기화할 때 전부 0으로 초기화가 된다.

 

추가로 삼항연산자가 초기화 할 때도 사용이 가능한지는 처음 알았다.

 

4) 이차원 배열 대각성 순회하기

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

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[0].length; j++ ) {
                if( i + j <= k )  answer += board[i][j];
            }
        }
        return answer;
    }
}

 

 

 

느낀점

벌써 0레벨에서 버벅이면 큰일났다고 생각하는데, 기초가 부족한가 생각이 든다.

1레벨은 언제 시작하나 싶다..

기초 공부를 좀 찾아서 해봐야겠다.