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

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

남건욱 2023. 10. 17. 22:25

목차

    반응형
    150. 원하는 문자열 찾기

    문제

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

    <작성한 코드>

    myString과 pat을 모두 toLowerCase()를 사용해서 소문자로 변경했다. 그 뒤에 contains을 사용해서 포함되는지 체크하고 포함된다면 answer에 1을 대입했다. 만약 포함되지 않는다면 0이 담긴 상태에서 반환될 것이다.

     

     

     

     

    151. 길이에 따른 연산

    문제

    class Solution {
        public int solution(int[] num_list) {
            int answer = 1;
            
            if(num_list.length >= 11){
                for(int i=0; i<num_list.length; i++){
                    answer += num_list[i];
                }
            } else{
                for(int i=0; i<num_list.length; i++){
                    answer *= num_list[i];
                }
            }
            
            if(num_list.length >= 11) answer--;
            
            return answer;
        }
    }

    <작성한 코드>

    answer을 1로 초기화해 줬다. 그 뒤 배열의 길이가 11 이상이면 answer에 원소들의 합을 더해줬고, 아니라면 원소들의 곱을 넣어줬다. 마지막 if에서는 배열의 길이가 11이상이면 -1을 해줬다. 이유는 초기값이 1이기 때문에 1이 큰 상태이기 때문이다.

     

     

    152. 1로 만들기

    문제

    class Solution {
        public int solution(int[] num_list) {
            int answer = 0;
            
            for(int i=0; i<num_list.length; i++){
                while(num_list[i] > 1){
                    if(num_list[i] %2 == 1){
                        num_list[i]--;
                    }
                    num_list[i] /= 2;
                    answer++;
                }
            }
            
            return answer;
        }
    }

    <작성한 코드>

    for문을 사용해서 배열의 길이까지 반복시켰다. for문 안에서는 while문을 사용해서 num_list [i]의 값이 1보다 크면 실행되게 하였다. if문으로 홀수면 num_list값에 -1을 해줬고 아래에서 /2를 계속해준다. 이때 answer도 1씩 증가해서 총횟수가 나오게 된다.

     

     

     

    153. 조건에 맞게 수열 변환하기 2

    문제

    import java.util.*;
    
    class Solution {
        public int solution(int[] arr) {
            int answer = 0;
            int cnt = 0;
            int[] arr2 = new int[arr.length];
            
            while(cnt != arr.length){
                cnt = 0;
                arr2 = arr.clone();
                for(int i=0; i<arr.length; i++){
                    if(arr[i] >= 50 && arr[i] %2 == 0){
                        arr[i] /= 2;
                    } else if(arr[i] < 50 && arr[i] %2 == 1){
                        arr[i] = arr[i] * 2 + 1;   
                    }
                    if(arr[i] == arr2[i]) cnt++;
                }
                answer++;
            }
            
            return answer-1;
        }
    }

    <작성한 코드>

    arr의 길이를 가진 arr2를 만들어줬다. while문안에서 arr2를 arr와 똑같은 값을 넣어주고 cnt도 0으로 계속 초기화되도록 설정했다. for문에서는 주어진 조건에 따라 /2 또는 *2+1을 해줬고 전부 이 값이 전의 arr2값과 같으면 cnt를 ++ 해주었다. 그 뒤 전체 for문이 끝날 때마다 answer++을 해주고 결괏값은 이전값을 반환해야 하기 때문에 -1을 하고 반환해 주었다.

     

     

     

    154. 조건에 맞게 수열 변환하기 1

    문제

    class Solution {
        public int[] solution(int[] arr) {
            int[] answer = new int[arr.length];
            
            for(int i=0; i<arr.length; i++){
                if(arr[i] >= 50 && arr[i] %2 == 0){
                    answer[i] = arr[i] /2;
                } else if(arr[i] < 50 && arr[i] %2 != 0){
                    answer[i] = arr[i] *2;
                } else{
                    answer[i] = arr[i];
                }
            }
            
            return answer;
        }
    }

    <작성한 코드>

    간단한 문제였다. answer의 길이도 arr와 동일하게 선언해 준 뒤 for문을 통해서 원소의 개수만큼 반복시켰다. 내부에선 if, else if, else를 사용해서 조건에 맞는 값을 answer에 그대로 대입하고 반환해 주었다.

     

     

     

    155. 수열과 구간 쿼리 1

    문제

    class Solution {
        public int[] solution(int[] arr, int[][] queries) {
            for(int i=0; i<queries.length; i++){
                int a = queries[i][0];
                int b = queries[i][1];
                
                for(int j=a; j<=b; j++){
                    arr[j] += 1;
                }
            }
            
            return arr;
        }
    }

    <작성한 코드>

    2차원배열의 0,1번째의 값을 a, b로 지정해 줬다. 그 뒤 for문으로 arr [j]에 있는 요소들을 1씩 증가시키고 arr를 반환하였다.

     

     

    156. n보다 커질 때까지 더하기

    문제

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

    <작성한 코드>

    간단한 문제였다. 반복문으로 numbers의 배열을 차례대로 더해주고 if문을 사용해서 answer이 n보다 커지면 for문을 종료하였다.

     

     

     

    157. 할 일 목록

    문제

    import java.util.*;
    
    class Solution {
        public String[] solution(String[] todo_list, boolean[] finished) {
            List<String> list = new ArrayList<>();
            
            for(int i=0; i<todo_list.length; i++){
                if(!finished[i]){
                    list.add(todo_list[i]);
                }
            }
            
            String[] answer = new String[list.size()];
            for(int i=0; i<list.size(); i++){
                answer[i] = list.get(i);
            }
            
            return answer;
        }
    }

    <작성한 코드>

    list를 하나 선언했다. 그리고 for문으로 원소의 길이만큼 반복시켜 주고 if문으로 finished [i]에 든 값이 false이면 list에 해당 todo_list [i] 값을 추가해 줬다. 두 번째 for문에서는 list안에 있는 원소들을 String형 배열 answer에 대입해 주고 반환하였다.

    .

     

     

    158. 5명씩

    문제

    import java.util.*;
    
    class Solution {
        public String[] solution(String[] names) {
            List<String> list = new ArrayList<>();
            
            for(int i=0; i<names.length; i++){
                if(i%5 == 0){
                    list.add(names[i]);
                }
            }
            
            String[] answer = new String[list.size()];
            for(int i=0; i<list.size(); i++){
                answer[i] = list.get(i);
            }
            
            
            return answer;
        }
    }

    <작성한 코드>
    list를 하나 만들어줬다. 그리고 for문으로 names의 길이만큼 반복시켰고 i가 5로 나눴을 때 0이 될 때 즉 0이거나 5의 배수일 때만 list에 그 값을 추가해 줬다. 그 뒤에 answer배열을 선언하고 값을 그대로 대입해 주고 반환하였다.

     

     

     

    159. 홀수 vs 짝수

    문제

    class Solution {
        public int solution(int[] num_list) {
            int answer = 0;
            int sum1 = 0;
            int sum2 = 0;
            
            for(int i=0; i<num_list.length; i++){
                if(i%2 == 0){
                    sum1 += num_list[i];
                } else{
                    sum2 += num_list[i];
                }
            }
            
            if(sum1 > sum2){
                answer = sum1;
            } else if(sum1 < sum2){
                answer = sum2;
            } else answer = sum1;
            
            
            return answer;
        }
    }

    <작성한 코드>

    간단한 문제였다. 짝수들의 합은 sum1, 홀수들의 합은 sum2에 저장시킨뒤 if문으로 큰 값을 answer에 넣어줬다. 만약 값이 같으면 sum1을 넣어주고 반환하였다.

     

     

     

    160. n개 간격의 원소들

    문제

    import java.util.*;
    
    class Solution {
        public int[] solution(int[] num_list, int n) {    
            List<Integer> list = new ArrayList<>();
            
            for(int i=0; i<num_list.length; i+=n){
                list.add(num_list[i]);
            }
            
            int[] answer = new int[list.size()];
            for(int i=0; i<list.size(); i++){
                answer[i] = list.get(i);
            }
            
            return answer;
        }
    }

    <작성한 코드>

    간단한 문제다. for문으로 num_list의 길이까지 반복시켰다. i는 n만큼 증가시키면서 list에 추가해 줬다. 그리고 list의 값을 int형 배열 answer에 넣어주고 반환하였다.

     

     

     

    161. n번째 원소까지

    문제

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

    <작성한 코드>

    간단한 문제다. n번째까지 넣어주면 된다. answer의 크기를 n만큼 설정해서 n번만큼 돌려주고 값을 넣어준뒤 반환하였다.

     

    반응형
    프로필사진

    남건욱's 공부기록