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

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

남건욱 2023. 11. 8. 19:39
반응형
57. 숫자 짝꿍

문제

class Solution {
    public String solution(String X, String Y) {
        StringBuilder answer = new StringBuilder();
        
        int[] x = new int[10];
        int[] y = new int[10];
        
        for(String str : X.split("")){
            x[Integer.parseInt(str)]++;
        }
        
        for(String str : Y.split("")){
            y[Integer.parseInt(str)]++;
        }
        
        for(int i=9; i>=0; i--){
            if(x[i] > 0 && y[i] > 0){
                int num = Math.min(x[i], y[i]);
                for(int j=0; j<num; j++){
                    answer.append(i);
                }
            }
        }
        
        if((answer.toString()).equals("")){
            return "-1";
        } else if(answer.toString().charAt(0)==48){
            return "0";
        }
        
        return answer.toString();
    }
}

<작성한 코드>

X, Y에 해당하는 10자리의 정수형 배열을 만들었다. 정수형 배열이니 각 0으로 초기화가 될 것이다. 그 뒤 forEach문을 사용해서 X를 공백 없이 나눠서 그 값을 정수형으로 바꿔준 뒤 x의 해당하는 인덱스를 찾아 1을 더해줬다. Y도 마찬가지로 해주었다. 이렇게 되면 배열 x, y의 해당되는 숫자에 카운트가 올라가 있을 것이다. 큰 수부터 나열을 해야 하기 때문에 세 번째 for문에서는 i는 9부터 1씩 빼면서 반복해 줬고 x [i]와 y [i]가 둘 다 0보다 작을 때 반복문을 하나 실행시켰다. 정수형 변수 num에 x [i], y [i] 중 작은 값을 넣고 j는 0부터 num이전까지 반복해 줬다. answer.append(i)를 사용해서 넣어줬다. 그 뒤 조건을 비교하였다. 만약 answer이 아무 문자열이 들어가 있지 않다면 -1을 반환하고, charAt(0)을 사용해서 answer의 첫 번째 문자를 가져오는데 이게 아스키코드 48, 즉 0이면 0을 반환한다. 아니라면 answer.toString()을 반환했다.

 

 

 

58. 삼총사

문제

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

<작성한 코드>

간단한 문제였다. 세 가지의 수를 비교해야 하니 i, j, k를 만들어주고 i는 0부터, j는 i보다 1 큰 수부터, k는 j보다 1 큰 수부터로 지정해 주고 범위는 i가 마지막으로 비교할 뒤에서 2번째 수까지, j는 1번째 수까지, k는 마지막수까지 비교해 주도록 하였다. 그 뒤 if문을 사용해서 세 가지 숫자의 합이 0이면 answer을 1씩 더해줬다. 그 뒤 answer을 반환하였다.

 

 

 

59. 콜라 문제

문제

class Solution {
    public int solution(int a, int b, int n) {
        int answer = 0;
        int remain = 0;
        int newCola = 0;
        
        while(true){
            if(n<a){
                break;
            }
            
            newCola = b * (n/a);
            remain = n % a;
            
            answer += newCola;
            n = newCola + remain;
        }

        return answer;
    }
}

<작성한 코드>

간단한 문제였다. 남은병의 개수로 사용할 변수 remain, 마신콜라의 개수로 사용할 변수 newCola를 선언해 주고 while문을 실행했다. if문을 사용해서 n이 a보다 작으면 while문을 종료하도록 했다. 받은 콜라는 b * (n/a)로 구해줬고, 남은 병은 n에서 a를 나눈 값의 나머지로 저장해 줬다. 답을 구하기 위해 answer에 받은 콜라의 개수를 더해주고 n에는 받은 콜라+남은 병을 더해서 while문을 조건과 일치하지 않을 때까지 계속 반복해 줬다. 그 뒤 answer을 반환했다.

반응형
프로필사진

남건욱's 공부기록