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

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

남건욱 2023. 10. 9. 12:57

목차

    반응형
    108. 그림 확대

    문제

    class Solution {
        public String[] solution(String[] picture, int k) {
            int height = picture.length;
            int width = picture[0].length();
            
            int plusHeight = height * k;
            int plusWidht = width * k;
            
            String[] answer = new String[plusHeight];
            
            for(int i=0; i<plusHeight; i++){
                int row = i / k;
                String result = "";
                
                for(int j=0; j<plusWidht; j++){
                    int col = j / k;
                    char ch = picture[row].charAt(col);
                    result += ch;
                }
                
                answer[i] = result;
            }
            
            
            return answer;
        }
    }

    <작성한 코드>

    기본 높이와 너비는 picture의 길이, 배열하나의 길이만큼이니 먼저 선언했다. 그 뒤 확장된 가로 세로의 길이는 기존 길이에서 * k를 해주면 된다. 후 정답이 될 answer배열의 크기는 확장된 높이의 길이만큼 선언했다. for문안에서는 먼저 int row에 i/k를 해줬다. 이유는 0부터 plusHeight까지 반복할 건데, k가 5일 때로 예를 들면 0/5 = 0, 1/5 = 0, 2/5 = 0, 3/5 = 0, 4/5 = 0, 5/5 = 1 이런 식으로 넣어야 할 개수만큼 넣도록 정수를 선언할 수 있기 때문이다. 내부의 for문에서는 같은 방법으로 열의 길이를 설정해 주고, 문자형 변수 ch안에 picture의 행번호에서 몇 번째 문자값을 가져올지 선언해 주고 result에 담아줬다. 담아준 result는 반복문이 한번 끝날 때마다 answer [i]에 넣어줬다.

     

     

     

    109. 커피 심부름

    문제

    class Solution {
        public int solution(String[] order) {
            int answer = 0;
            
            for(int i=0; i<order.length; i++){
                if(order[i].contains("americano") || order[i].equals("anything")) answer += 4500;
                if(order[i].contains("cafelatte")) answer += 5000;
            }
            
            return answer;
        }
    }

    <작성한 코드>

    간단한 문제다. 각 order의 배열 안에 americano, cafelatte가 있는지 체크 후 존재하면 맞는 금액을 더해줬다. anything일 경우에도 아메리카노와 같은 가격을 더해줘야 하기 때문에 아메리카노 부분에 or문으로 넣어주고 반환했다.

     

     

     

    110. 날짜 비교하기

    문제

    class Solution {
        public int solution(int[] date1, int[] date2) {
            int answer = 0;
            
            for(int i=0; i<date1.length; i++){
                if(date1[i] < date2[i]) return 1;
                if(date1[i] > date2[i]) return 0;
            }
            
            return answer;
        }
    }

    <작성한 코드>

    각각의 원소를 비교했다. 기본값을 0으로 두고 만약 date1의 연도값이 더 작으면 1을 리턴하고 크면 0을 리턴했다. 여기서 걸리지 않으면(값이 같으면) 기본값인 0으로 지속될 것이다. 그 후 월과 일도 차례로 비교하고 아무것도 걸리지 않으면 answer에 0이 담긴 채로 그대로 반환되게 해 줬다.

     

     

     

    111. 주사위 게임 1

    문제

    class Solution {
        public int solution(int a, int b) {
            int answer = 0;
            
            if(a%2 == 1 && b%2 == 1) answer += (a*a) + (b*b);
            if((a%2 == 1 && b%2 == 0) || (a%2 == 0 && b%2 == 1)) answer += 2 * (a+b);
            if(a%2 == 0 && b%2 == 0) answer += Math.abs(a-b);
            
            return answer;
        }
    }

    <작성한 코드>

    각 조건에 맞게 if문을 걸어주고 값을 맞게 반환했다. 절댓값을 구할때는 Math.abs를 사용해서 a-b의 절댓값을 대입해 줬다.

     

     

     

    112. 정수 찾기

    문제

    class Solution {
        public int solution(int[] num_list, int n) {
            int answer = 0;
            
            for(int i=0 ;i<num_list.length; i++){
                if(num_list[i] == n) answer = 1;
            }
            
            return answer;
        }
    }

    <작성한 코드>

    간단한 문제였다. num_list의 길이만큼 반복해 주고 각 원소의 값이 n과 일치하면 answer에 1을 넣어줬다.

     

     

     

    113. 꼬리 문자열

    문제

    class Solution {
        public String solution(String[] str_list, String ex) {
            String answer = "";
            
            for(int i=0; i<str_list.length; i++){
                if(str_list[i].contains(ex)) continue;
                answer += str_list[i];
            }
            
            return answer;
        }
    }

    <작성한 코드>

    str_list의 길이만큼 반복문을 돌려줬다. 내부에서는 str_list내부에 ex를 포함하고 있으면 continue 시켜줬고, 여기에 걸리지 않으면 answer에 str_list의 값을 추가해 줬다.

     

     

     

    114. 부분 문자열

    문제

    class Solution {
        public int solution(String str1, String str2) {
            int answer = 0;
            
            if(str2.contains(str1)) answer = 1;
            
            return answer;
        }
    }

    <작성한 코드>

    매우 간단한 문제다. str2안에 str1이 포함되어 있는지 비교만 해주면 된다. contains를 사용했다.

     

     

     

    115. 부분 문자열인지 확인하기

    문제

    class Solution {
        public int solution(String my_string, String target) {
            int answer = 0;
            
            if(my_string.contains(target)) answer = 1;
            
            return answer;
        }
    }

    <작성한 코드>

    바로 위의 부분 문자열문제와 동일한 문제였다. contains으로 내부값을 비교해 줬다.

    반응형
    프로필사진

    남건욱's 공부기록