본문 바로가기

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

[프로그래머스] 왼쪽 오른쪽

728x90

코드 힌트

방법 1: 인덱스를 저장해서 배열을 잘라내기

  • 시작 및 끝 인덱스 저장: 배열의 시작과 끝 인덱스를 저장합니다.
  • 결과 배열 초기화: 시작 인덱스부터 끝 인덱스까지의 요소 개수를 계산하여 결과 배열(result)의 크기를 초기화합니다.
  • 배열 요소 복사: for 루프를 사용하여 시작 인덱스부터 끝 인덱스까지의 요소를 순회하며 결과 배열에 복사합니다.

 

방법 2: copyOfRange() 메소드를 사용해서 배열을 잘라내기

import java.util.Arrays;

class Solution {
    public int[] sliceArrayUsingCopyOfRange(int[] arr, int startIndex, int endIndex) {
        // 배열 복사 (copyOfRange() 사용)
        int[] result = Arrays.copyOfRange(arr, startIndex, endIndex + 1);
        return result;
    }
}

 

 

  • copyOfRange() 사용: Arrays.copyOfRange() 메서드를 사용하여 원본 배열(arr)에서 지정된 범위(startIndex부터 endIndex까지)의 요소를 복사합니다.
  • 자동 크기 조정: copyOfRange() 메서드는 자동으로 시작 인덱스부터 끝 인덱스까지의 요소를 복사하여 새 배열을 생성하며, 복사된 배열의 크기는 (endIndex - startIndex + 1)이 됩니다.

정답은 더보기 클릭

더보기

인덱스로 배열 잘라내기

import java.util.*;

class Solution {
    public String[] solution(String[] str_list) {
        // 결과를 담을 리스트를 생성
        List<String> list = new ArrayList<>();
        
        // s: 시작 인덱스, e: 끝 인덱스
        int s = 0;
        int e = 0;
        
        // 문자열 배열을 순회하며 'l' 또는 'r'을 찾기
        for (int i = 0; i < str_list.length; i++) {
            // 'l'을 찾으면 현재 인덱스를 끝 인덱스로 설정하고 루프를 종료
            if (str_list[i].equals("l")) {
                e = i;
                break;
            } 
            // 'r'을 찾으면 다음 인덱스를 시작 인덱스로 설정하고 끝 인덱스를 배열의 끝으로 설정
            else if (str_list[i].equals("r")) {
                s = i + 1;
                e = str_list.length;
                break;
            }
        }
        
        // 결과 배열을 필요한 크기로 초기화
        String[] result = new String[e - s];
        
        // 결과 배열에 지정된 범위의 문자열을 복사
        int index = 0;
        for (int i = s; i < e; i++) {
            result[index++] = str_list[i];
        }
        
        return result;
    }
}

 

copyOfRange() 사용해서 배열 자르기

import java.util.*;

class Solution {
    public String[] solution(String[] str_list) {
        // str_list 배열을 순회하여 "l" 또는 "r"을 찾음
        for (int i = 0; i < str_list.length; i++) {
            // "l"을 찾으면 그 인덱스까지의 부분 배열을 반환
            if (str_list[i].equals("l")) {
                return Arrays.copyOfRange(str_list, 0, i);
            }
            // "r"을 찾으면 그 인덱스 다음부터 끝까지의 부분 배열을 반환
            else if (str_list[i].equals("r")) {
                return Arrays.copyOfRange(str_list, i + 1, str_list.length);
            }
        }
        
        // "l"이나 "r"이 없는 경우 빈 배열 반환
        return new String[0];
    }
}

 

728x90