programmers 기초 Day13

Hwani·2024년 6월 13일

프로그래머스 DAY 1~25

목록 보기
39/51

문제 - n번째 원소부터

풀이

import java.util.*;

class Solution {
    public int[] solution(int[] num_list, int n) {
        return Arrays.copyOfRange(num_list, n-1, num_list.length);
    }
}

설명

Arrays.copyOfRange() 메서드는 배열의 부분을 복사하여 새로운 배열을 생성한다.
사용법 : Arrays.copyOfRange(원본 배열, 복사를 시작할 인덱스, 복사를 종료할 인덱스)

  • 매개변수 num_list 배열에서 인덱스 번호이기 때문에 n-1 부터 배열의 끝까지 복사하여 리턴한다.

문제 - 순서 바꾸기

풀이

import java.util.*;

class Solution {
    public int[] solution(int[] num_list, int n) {
        int[] part1 = Arrays.copyOfRange(num_list, n, num_list.length);
        int[] part2 = Arrays.copyOfRange(num_list, 0, n);

        int[] result = new int[part1.length + part2.length];
        
        System.arraycopy(part1, 0, result, 0, part1.length);
        System.arraycopy(part2, 0, result, part1.length, part2.length);

        return result;
    }
}

설명

System.arraycopy는 배열을 복사하여 합칠 때 유용하게 쓰인다.
사용법 : System.arraycopy(원본 배열, 원본 배열에서 복사 시작 인덱스, 대상 배열, 대상 배열에서 복사 시작 인덱스, 복사할 요소의 개수)

  • 배열을 2개로 나눠야 하기때문에 2개의 배열을 생성하고 copyofRange()를 사용하여 조건에 맞게 분리를한다.
  • 결과를 담아 줄 배열을 생성한다.
  • part1 배열을 복사하여 result에 담아주고, part2의 배열을 복사하여 result에 담아준 후 리턴한다.

문제 - 왼쪽 오른쪽

풀이

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;
    }
}

설명

이 문제는 l과 r을 기준으로 l이 나온다면 l 왼쪽을 리턴 r이 나온다면 r 오른쪽을 리턴하는 문제

  • for문으로 배열을 순회하여 l을 찾고 copyofRange() 메서드를 이용해 l이 나오기 전까지의 값을 리턴한다.
  • r도 마찬가지로 r을 찾고 r부터 배열의 끝까지 값을 리턴한다.

문제 - n번째 원소까지

풀이

import java.util.*;

class Solution {
    public int[] solution(int[] num_list, int n) {
        return Arrays.copyOfRange(num_list, 0, n);
    }
}

설명

  • copyofRange() 메서드로 처음부터 n번째까지 값을 리턴한다.

문제 - n개 간격의 원소들

풀이

class Solution {
    public int[] solution(int[] num_list, int n) {
        int[] answer = new int[(num_list.length + n - 1) / n];
        int index = 0;

        for (int i = 0; i < num_list.length; i += n) {
            answer[index++] = num_list[i];
        }

        return answer;
    }
}

설명

  • 조건에 맞게 담아줄 배열의 크기를 설정하고 배열을 만든다.
  • 리턴할 배열에 인덱스 값을 초기화한다.
  • for문을 통해 n 간격대로 증가하여 그 값을 answer에 담아주고 리턴한다.
profile
개발자될거야

0개의 댓글