프로그래머스 문제풀이/알고리즘 (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 공부기록