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

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

남건욱 2023. 9. 28. 07:04
반응형
69. 이진수 더하기

문제

class Solution {
    public String solution(String bin1, String bin2) {
        String answer = "";
        int rBin1 = ten(bin1);
        int rBin2 = ten(bin2);
        int sum = rBin1 + rBin2;
        
        answer = two(sum);
    
        return answer;
    }
    
    public int ten(String a){
        int result = Integer.parseInt(a, 2);
        return result;
    }
    
    public String two(int a){
        if(a == 0){
            return "0";
        }
        
        String result = "";
        while(a > 0){
            result = a%2 + result;
            a = a/2;
        }
        return result;
    }
}

<작성한 코드>

우선 받아온 2진수 두 개를 10진수로 변환해 줬다. Integer.parseInt(a,2)를 사용해서 2진수 a를 10진수로 바꾸도록 설정했다. 그 후 더해진 값을 10진수인 상태에서 더해주고 다시 2진수로 바꿔주었다. 

 

 

 

70. A로 B 만들기

문제

import java.util.*;

class Solution {
    public int solution(String before, String after) {
        int answer = 0;
        
        char[] beforeArray = before.toCharArray();
        char[] afterArray = after.toCharArray();
        
        Arrays.sort(beforeArray);
        Arrays.sort(afterArray);
        
        if(Arrays.equals(beforeArray, afterArray)) answer = 1;
        
        return answer;
    }
}

<작성한 코드>

우선 두 String형 변수들을 char형으로 변환시켰다. 그 후 Arrays.sort를 사용해서 정렬시켜 준 뒤 배열을 비교하도록 Arrays.equals을 사용하여 만약 같다면 answer에 1을 대입해 주고 아니라면 그대로 0을 반환한다.

 

 

 

71. k의 개수

문제

class Solution {
    public int solution(int i, int j, int k) {
        int answer = 0;
        
        for(int z = i; z<=j; z++){
            String zz = String.valueOf(z);
            for(int x=0; x<zz.length(); x++){
                if(Character.getNumericValue(zz.charAt(x)) == k) answer++;
            }
        }
        
        
        return answer;
    }
}

<작성한 코드>

for문을 하나 만들고 i부터 j까지 반복하도록 했다. 그리고 안에 정수 z를 String형태로 변경시켜 줬다. 그 뒤 중첩해서 for문을 하나 더 만들어주고 zz의 각각의 원소를 k와 비교했다. 만약 같으면 answer을 ++ 해줘서 정답을 구했다. Character.getNumericValue는 문자를 정수값으로 나타내는 역할을 한다.

 

 

 

72. 중복된 문자 제거

문제

class Solution {
    public String solution(String my_string) {
        String answer = "";
        
        for(int i=0; i<my_string.length(); i++){
            if(my_string.indexOf(my_string.charAt(i)) == i) answer+= my_string.charAt(i);
        }
        
        return answer;
    }
}

<작성한 코드>

for문을 my_string의 길이에 맞게 반복시켰다. 그리고 if문안에 indexOf를 사용해서 my_string의 각 글자가 처음 등장하는 곳의 위치를 찾는다. 만약 그 위치가 i와 같다면 처음 등장하는 문자이기 때문에 이 경우에만 answer에 추가해 줬다.

 

 

 

73. 삼각형의 완성조건(1)

문제

import java.util.*;

class Solution {
    public int solution(int[] sides) {
        int answer = 2;
        Arrays.sort(sides);
        
        if(sides[2] < sides[0]+sides[1]) answer = 1;

        return answer;
    }
}

<작성한 코드>

answer의 기본값을 2로 지정했다. 그리고 Arrays.sort를 사용해서 sides를 오름차순으로 정렬해 준 뒤 제일 큰 [2] 값이 [0]+[1]보다 작은지 체크한다. 만약 작으면 삼각형을 만들 수 있으니 answer에 1을 넣어주었다. 만약 if에 걸리지 않는다면 그대로 2를 반환한다.

 

 

 

74. 가까운 수

문제

import java.util.*;

class Solution {
    public int solution(int[] array, int n) {
        int answer = array[0];
        int min = Math.abs(array[0] - n);
        
        for(int i=1; i<array.length; i++){
            int result = Math.abs(array[i] - n);
            if(min > result || (min == result && array[i] < answer)){
                answer = array[i];
                min = result;
            }
        }
            
        return answer;
    }
}

<작성한 코드>

값을 비교하기 위해 answer을 array [0]으로 초기화, 최소 차이를 저장해둘 min에는 array [0] - n을 해준 값의 절댓값을 넣었다. 그리고 for문으로 1부터 전체길이만큼 반복해 줬고 반복문 내의 result는 array [i] -n을 해줬다. 만약 차이가 min보다 result가 더 작거나, 두 개가 같은데 현재 원소가 answer보다 작을 때 작은 값을 반환해야 하니 이경우에도 answer, min의 값을 재설정해주었다. 금방 풀었다고 생각했는데 제출 시 5번 테스트케이스에서 자꾸 오류가 떴다. 생각해 보니 같은 경우를 처리를 안 해줬다. 그래서 시간이 생각보다 오래 걸렸던 것 같다.

반응형
프로필사진

남건욱's 공부기록