본문 바로가기

프로그래머스(Java)/Level 0

[프로그래머스] 리스트 자르기

728x90

코드 힌트:

  1. for문에서 += 사용:
    • for (int i = a; i <= b; i += c) { ... }: i += c는 i = i + c와 동일하며, c 간격으로 인덱스를 증가시키는 역할을 합니다. 이를 통해 반복문에서 인덱스를 조절하고 범위를 설정할 수 있습니다.
  2. 동일한 for문 사용:
    • switch (n) { ... }을 통해 a, b, c 값을 설정하면서도 반복문은 항상 동일한 구조로 작동합니다. 이는 코드의 재사용성을 높이며, 각 경우에 따라 설정된 인덱스 범위를 사용하여 배열에서 요소를 추출할 수 있습니다.
  3. List 사용:
    • List<Integer> list = new ArrayList<>();: 배열의 크기가 변할 수 있는 경우, 요소를 동적으로 추가하거나 제거할 수 있는 List를 사용하는 것이 효율적입니다. ArrayList는 요소의 추가 및 제거가 O(1) 시간 복잡도에 수행됩니다.

 


정답은 더보기 클릭

더보기
import java.util.*;

class Solution {
    public int[] solution(int n, int[] slicer, int[] num_list) {
        // slicer 배열에서 각각의 변수 a, b, c를 초기화
        int a = slicer[0];
        int b = slicer[1];
        int c = slicer[2];
        
        // 결과를 담을 리스트 생성
        List<Integer> list = new ArrayList<>();
        
        // n 값에 따라서 a, b, c 값을 다르게 설정
        switch (n) {
            case 1:
                // n = 1일 때: num_list의 0번 인덱스부터 b번 인덱스까지 가져옴
                a = 0;  // 시작 인덱스 0으로 설정
                c = 1;  // 기본 간격 1로 설정 (모든 요소를 순서대로 가져옴)
                break;
            case 2:
                // n = 2일 때: num_list의 a번 인덱스부터 마지막 인덱스까지 가져옴
                b = num_list.length - 1;  // 마지막 인덱스로 설정
                c = 1;  // 기본 간격 1로 설정 (모든 요소를 순서대로 가져옴)
                break;
            case 3:
                // n = 3일 때: num_list의 a번 인덱스부터 b번 인덱스까지 가져옴
                c = 1;  // 기본 간격 1로 설정 (모든 요소를 순서대로 가져옴)
                break;
        }
        
        // 설정된 a, b, c 값을 이용하여 num_list에서 요소를 추출하여 list에 추가
        for (int i = a; i <= b; i += c) {
            list.add(num_list[i]);
        }
        
        // list를 int 배열로 변환
        int[] result = new int[list.size()];
        for (int i = 0; i < list.size(); i++) {
            result[i] = list.get(i);
        }
        
        return result;
    }
}
728x90