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