프로그래머스 문제풀이/알고리즘 (JAVA)

[JAVA] 프로그래머스 알고리즘 문제풀이 - Level 0 (101~107번 문제풀이)

남건욱 2023. 10. 5. 11:19
반응형
101. 이차원 배열 대각선 순회하기

문제

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

<작성한 코드>

간단한 문제였다. 중첩 for문을 사용해서 i+j가 k보다 작으면 answer에 더해줬다. 배열의 규칙은 정해져 있으니 i, j 값을 그대로 사용해도 가능한 문제였다.

 

 

 

102. 정사각형으로 만들기

문제

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

<작성한 코드>

열과 행정 더 긴 길이를 찾아서 max에 대입해 줬다. 그 뒤 answer의 크기를 [max][max]로 생성해 주고 중첩 for문으로 answer에 arr값을 그대로 넣어줬다. int형 배열에서 초기화되지 않은 수는 0으로 자동으로 초기화되기 때문에 arr안의 값만 그대로 넣어줬다.

 

 

 

103. 특이한 이차원 배열 2

문제

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

<작성한 코드>

[i][j]와 [j][i]이 같아야 하니 중첩 for문으로 모든 원소를 돌도록 해줬다. 만약 같지 않으면 answer에 0을 집어넣고 break를 실행해 줬다. if에 걸리지 않는다면 answer은 초기값인 1을 반환하게 했다.

 

 

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

문제

class Solution {
    public int[][] solution(int n) {
        int[][] answer = new int[n][n];
        
        int count = 1;
        int i = 0, j = 0;
        int direction = 0; // 0: 오른쪽, 1: 아래, 2: 왼쪽, 3: 위

        while(count <= n*n){
            answer[i][j] = count;
            count++;

            // 다음 위치 계산
            if(direction == 0){ // 오른쪽
                j++;
                if(j == n || answer[i][j] != 0){
                    direction = 1; // 방향 전환
                    i++;
                    j--;
                }
            }
            else if(direction == 1){ // 아래
                i++;
                if(i == n || answer[i][j] != 0){
                    direction = 2; // 방향 전환
                    i--;
                    j--;
                }
            }
            else if(direction == 2){ // 왼쪽
                j--;
                if(j < 0 || answer[i][j] != 0){
                    direction = 3; // 방향 전환
                    i--;
                    j++;
                }
            }
            else if(direction == 3){ // 위
                i--;
                if(i < 0 || answer[i][j] != 0){
                    direction = 0; // 방향 전환
                    i++;
                    j++;
                }
            }
        }
        
        return answer;
    }
}

<작성한 코드>

값을 넣어주기 위해 count를 선언, 위치를 체크해 주기 위해 direction 선언을 해줬다. 0은 오른쪽, 1은 아래, 2는 왼쪽, 3은 위쪽방향이다. while문으로 count가 배열의 총원소의 개수보다 작을 때 반복되게 하였다. count는 1로 초기화 해뒀기 때문에 answer [i][j]는 1부터 들어갈 것이다. 그 뒤 count++를 해주고 direction에 따라 오른쪽 아래 왼쪽 위 방향으로 순차적으로 이동한다. if문안에서 다시 if문으로 원소길이의 끝에 다다르거나 내부의 값이 이미 초기화되어서 0이 아닌 다른 수라면 방향을 전환해 줬다.

반가운 문제였다. 저번주에 코딩테스트를 봤을 때 나왔던 문제랑 100% 일치했다. 

 

 

105. 특이한 이차원 배열 1

문제

class Solution {
    public int[][] solution(int n) {
        int[][] answer = new int[n][n];
        
        for(int i=0; i<n; i++){
            for(int j=0; j<n; j++){
                if(i==j) answer[i][j] = 1;
                else answer[i][j] = 0;
            }
        }
        
        return answer;
    }
}

<작성한 코드>

그냥 대입만 해주면 끝나는 문제였다. 문제에 제시된 조건대로 i==j면 1을 대입, 아니면 0을 대입해 줬다.

 

 

 

106. l로 만들기

문제

class Solution {
    public String solution(String myString) {
        String answer = "";
        
        for(int i=0; i<myString.length(); i++){
            char ch = myString.charAt(i);
            if(ch < 'l') answer += "l";
            else answer += ch;
        }
        
        return answer;
    }
}

<작성한 코드>

myString의 길이만큼 반복해 줬고 각 원소가 l보다 작으면 answer에 l을 넣어줬다. 만약 l보다 크거나 같으면 본래의 문자를 그대로 넣어줬다.

 

 

 

107. 조건에 맞게 수열 변환하기 3

문제

class Solution {
    public int[] solution(int[] arr, int k) {
        int[] answer = new int[arr.length];
        
        for(int i=0; i<arr.length; i++){
            if(k % 2 == 1){
                answer[i] = arr[i] * k;
            }else {
                answer[i] = arr[i] + k;
            }
        }
        
        return answer;
    }
}

<작성한 코드>

간단한 문제였다. for문으로 홀수면 곱하기 k 짝수면 +k를 해줬다.

반응형
프로필사진

남건욱's 공부기록