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

[JAVA] 프로그래머스 알고리즘 문제풀이 - Level 1 (22~29번 문제풀이) / Level 0 (224/224)

남건욱 2023. 10. 26. 10:53
반응형
22. 제일 작은 수 제거하기

문제

import java.util.*;

class Solution {
    public int[] solution(int[] arr) {
        if(arr.length == 1){
            return new int[]{-1};
        }
        
        int min = Arrays.stream(arr).min().getAsInt();
        List<Integer> list = new ArrayList<>();
        
        for(int i=0; i<arr.length; i++){
            if(arr[i] != min) list.add(arr[i]);
        }
        
        int[] answer = new int[list.size()];
        for(int i=0; i<list.size(); i++){
            answer[i] = list.get(i);
        }
        
        return answer;
    }
}

<작성한 코드>

arr의 길이가 1이라면 -1을 바로 반환해 줬다. 아니라면 정수형 변수 min에 Arrays.stream(). min(). getAsInt()를 사용해서 제일 작은 정수를 담아준다. 그리고 list를 선언해 준 뒤 반복문을 사용해서 방금 구해준 min과 arr [i] 값이 같지 않으면 list에 추가해 줬다. 그 뒤 list의 크기만큼 answer의 크기를 선언해 준 뒤 answer안에 list의 값을 넣어주고 반환하였다.

 

 

 

23. 짝수와 홀수

문제

class Solution {
    public String solution(int num) {
        String answer = "";
        
        if(num%2 == 0){
            answer += "Even";
        } else{
            answer += "Odd";
        }
        
        return answer;
    }
}

<작성한 코드>

간단한 코드이다. 짝수이면 Even, 홀수이면 Odd를 추가해주고 answer를 반환해 줬다.

 

 

 

24. 최대공약수와 최소공배수

문제

import java.util.*;

class Solution {
    public int[] solution(int n, int m) {
        int[] answer = new int[2];
        List<Integer> list = new ArrayList<>();
        
        for(int i=1; i<=Math.min(n,m); i++){
            if(n%i == 0 && m%i == 0){
                list.add(i);
            }
        }
        
        answer[0] = list.get(list.size()-1);
        answer[1] = n * m / answer[0];
        
        return answer;
    }
}

<작성한 코드>

answer의 길이는 최대공약수, 최소공배수 두 개만 넣으면 되니 2로 지정해 주고, list를 하나 만들어줬다. 그 뒤 for문으로 1부터 n, m 중 작은 값까지 반복하도록 하고 두 개의 공약수들을 list에 저장했다. 그 뒤 최대공약수에는 list의 마지막값을 대입해 줬다. 최대공배수는 n*m을 해준뒤 최대공약수로 나눠주고 answer[1]에 대입해줬다. 그 뒤 answer을 반환하였다.

 

 

 

25. 콜라츠 추측

문제

class Solution {
    public int solution(long num) {
        int answer = 0;
        
        while(num != 1){
            if(num%2 == 0){
                num /= 2;
            } else{
                num = num*3 + 1;
            }
            answer++;
            
            if(answer >= 500){
            return -1;
            }
        }
        
        return answer;
    }
}

<작성한 코드>

간단한 문제였다. while문으로 num이 1이 아닐 때 반복하도록 했고, 짝수면 나누기 2 홀수면 곱하기 3을 하고 1을 더해줬다. 그 뒤 answer을 1씩 증가시키고 마지막에 answer이 500 이상이 되면 -1을 반환하였다.

 

 

 

26. 평균 구하기

문제

class Solution {
    public double solution(int[] arr) {
        double answer = 0;
        
        for(int a : arr){
            answer += a;
        }
        
        answer = answer/(arr.length);
        
        return answer;
    }
}

<작성한 코드>

간단한 문제였다. arr의 값들을 전부 answer에 더해주고 더한 값을 arr의 길이로 나눠주고 반환했다.

 

 

 

27. 하샤드 수

문제

class Solution {
    public boolean solution(int x) {
        boolean answer = true;
        String result = String.valueOf(x);
        int sum = 0;
        
        for(int i=0; i<result.length(); i++){
            sum += Integer.parseInt(String.valueOf(result.charAt(i)));
        }
        
        if(x%sum != 0){
            answer = false;
        }
        
        
        return answer;
    }
}

<작성한 코드>

정수형 값 x를 문자열로 변환해 주고 자릿수의 합을 저장할 sum을 선언해 줬다. 그 뒤 for문을 사용해서 result의 길이만큼 반복해 주고 각 자릿수를 Integer.parseInt()를 사용해서 정수로 바꾼 뒤 sum에 더해줬다. 아래 if문에서는 sum이 x의 약수인지 확인하고 아니라면 answer에 false를 대입해 준다. 그 뒤 answer를 반환했다.

 

 

 

28. 핸드폰 번호 가리기

문제

class Solution {
    public String solution(String phone_number) {
        String answer = "";
        
        for(int i=0; i<phone_number.length(); i++){
            char ch = phone_number.charAt(i);
            if(i < phone_number.length() - 4){
                answer += "*";
            } else{
                answer += ch;
            }
        }
        
        return answer;
    }
}

<작성한 코드>

for문을 사용해서 핸드폰번호의 길이까지 반복해 줬다. 내부에서는 핸드폰번호를 한 글자씩 ch에 담아주고 조건문으로 i가 마지막 4자리가 아니라면 *을 추가하고 마지막 4자리라면 추출한 ch를 추가해 주고 answer를 반환해 줬다.

 

 

 

29. 행렬의 덧셈

문제

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

<작성한 코드>

간단한 문제였다. answer의 크기는 arr1의 행과 열의 길이로 선언해 줬다. 그 뒤 반복문을 사용해서 arr1 + arr2의 값을 answer에 넣어주고 반환했다.

반응형
프로필사진

남건욱's 공부기록