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

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

남건욱 2023. 10. 18. 16:00

목차

    반응형
    162. 왼쪽 오른쪽

    문제

    import java.util.*;
    
    class Solution {
        public String[] solution(String[] str_list) {
            String[] answer = {};
            
            for(int i=0; i<str_list.length; i++){
                if(str_list[i].equals("l")){
                    return Arrays.copyOfRange(str_list, 0, i);
                } else if(str_list[i].equals("r")){
                    return Arrays.copyOfRange(str_list, i+1, str_list.length);
                }
            }
            
            return answer;
        }
    }

    <작성한 코드>

    반복문으로 str_list의 길이까지 반복시켰다. 순서대로 돌리면서 처음 만나는 원소중 l, r이 있을 때 if문에 걸린다. l을 만났다면 Arrays.copyOfRange()를 사용해서 str_list의 첫 번째 원소부터 i번째 이전까지의 원소들을 복사해서 반환한다. r을 만나게 된다면 str_list의 i+1번째 원소부터 마지막 원소까지 복사 후 반환한다. if문에 걸리지 않고 for문이 끝난다면 answer을 그대로 반환한다.

     

     

    163. 순서 바꾸기

    문제

    import java.util.*;
    
    class Solution {
        public int[] solution(int[] num_list, int n) {
            List<Integer> list = new ArrayList<>();
            
            for(int i=n; i<num_list.length; i++){
                list.add(num_list[i]);
            }
            
            for(int i=0; i<n; i++){
                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;
        }
    }

    <작성한 코드>

    리스트를 하나 만들고 n번째부터 마지막 원소까지 list에 저장했다. 그 뒤 남은 원소를 저장하기 위해 0번째 원소부터 n이전까지의 원소들을 저장하고 for문을 사용해서 list의 값을 answer에 초기화시켜주고 반환하였다.

     

     

     

    164. n번째 원소부터

    문제

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

    <작성한 코드>

    간단한 문제였다. answer의 길이를 선언해준뒤 for문을 사용해서 answer [0]부터 차례대로 num_list [i]를 넣어주고 반환하면 된다.

     

     

    165. 배열 조각하기

    문제

    import java.util.*;
    
    class Solution {
        public int[] solution(int[] arr, int[] query) {
    
            for(int i=0; i<query.length; i++){
                if(i%2 == 0){
                    arr = Arrays.copyOfRange(arr, 0, query[i]+1);
                } else{
                    arr = Arrays.copyOfRange(arr, query[i], arr.length);
                }
            }
            
            return arr;
        }
    }

    <작성한 코드>

    간단한 문제였다. for문으로 query의 길이만큼 반복시켜준뒤 i가 홀수일 때는 0번째 원소부터 query번째 값까지 복사해서 대입해 주고 짝수일때는 query번째 값부터 배열의 마지막 원소까지 복사해서 arr에 덮어줬다. 그 뒤 arr를 반환해 줬다.

     

     

     

    166. 2의 영역

    문제

    import java.util.*;
    
    class Solution {
        public int[] solution(int[] arr) {
            List<Integer> list = new ArrayList<>();
            
            for(int i=0; i<arr.length; i++){
                if(arr[i] == 2){
                    list.add(i);
                }
            }
            
            if(list.size() == 0){
                return new int[]{-1};
            }
            
            arr = Arrays.copyOfRange(arr, list.get(0), list.get(list.size()-1)+1);
            
            
            return arr;
        }
    }

    <작성한 코드>

    arr의 길이만큼 반복문을 돌리며 arr [i]가 2일 때 list에 i값을 더해줘서 2가 나온 인덱스 값을 저장해 줬다. 그 뒤 list의 크기가 0이면 2가 없다는 뜻이니 -1을 반환해 줬다. 여기에 걸리지 않는다면 Arrays.copyOfRange를 사용해서 arr의 2가 첫 번째 나온 list(0) 값과 arr의 마지막 값도 포함해야 하니 list의 마지막인덱스에서 +1을 해준만큼 복사해 줬다. 그 뒤 arr를 반환하였다.

     

     

     

    167. 배열 만들기 3

    문제

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

    <작성한 코드>

    for문을 사용해서 intervals의 길이까지 반복시켰고 시작점을 a, 종료점을 b로 잡았다. 내부 for문에서는 a부터 b까지의 값을 list에 추가해 줬고 마지막 for문에서는 list의 값들을 answer에 초기화해 주고 반환하였다.

     

     

     

    168. 첫 번째로 나오는 음수

    문제

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

    <작성한 코드>

    간단한 문제다. for문으로 모든 원소를 확인하였고 if문을 사용해서 num_list [i]가 음수면 answer에 i를 대입하고 break를 사용하여 for문을 종료시켰다. 그리고 answer의 값을 반환하였다.

     

     

     

    169. 리스트 자르기

    문제

    import java.util.*;
    
    class Solution {
        public int[] solution(int n, int[] slicer, int[] num_list) {
            List<Integer> list = new ArrayList<>();
            int a = slicer[0];
            int b = slicer[1];
            int c = slicer[2];
            
            if(n == 1){
                for(int i=0; i<=b; i++){
                    list.add(num_list[i]);
                }
            }else if(n == 2){
                for(int i=a; i<num_list.length; i++){
                    list.add(num_list[i]);
                }            
            }else if(n == 3){
                for(int i=a; i<=b; i++){
                    list.add(num_list[i]);
                }            
            }else{
                 for(int i=a; i<=b; i+=c){
                    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;
        }
    }

    <작성한 코드>

     n이 1~4까지 각각 수행하는 게 다르기 때문에 조건문을 사용해서 각각의 상황에 다른 코드를 부여했다. list에 원소값이 추가가 되면 마지막에 answer안에 list의 값을 대입해 주고 종료하였다.

    반응형
    프로필사진

    남건욱's 공부기록