https://school.programmers.co.kr/learn/courses/30/lessons/181897
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
Algorithm
min을 큰 값으로, max를 작은 값으로 설정한다. 그 후 루프를 돌며 만약 원소가 2이면 min,max 값을 계산한다.
min이 max 이하인 경우, arr 배열에서 2가 모두 포함된 연속된 부분 배열이 존재하는 것이다.따라서 Arrays.copyOfRange를 사용하여 arr 배열의 min부터 max + 1까지의 요소를 복사하여 반환한다.
min이 max보다 큰 경우, arr 배열에 2가 없는 것이므로 존재하지 않는 부분 배열을 나타내기 위해 새로운 int 배열 {-1}을 생성하여 반환해준다.
Python
# list.index(x) 메서드는 리스트에서 값 x의 첫 번째 등장 위치(인덱스)를 반환
def solution(arr):
if 2 not in arr:
return [-1]
return arr[arr.index(2) : len(arr) - arr[::-1].index(2)]
Java
import java.util.Arrays;
class Solution {
public int[] solution(int[] arr) {
int min = 100000, max = 0;
for (int i = 0; i < arr.length; i++) {
if (arr[i] == 2) {
min = Math.min(min, i);
max = Math.max(max, i);
}
}
if (min <= max) {
return Arrays.copyOfRange(arr, min, max + 1);
} else {
return new int[]{-1};
}
}
}
+) 나의 첫 구현 코드는 다음과 같다. left pointer,right pointer를 각각 두고 구현하였다.
import java.util.*;
class Solution {
public ArrayList<Integer> solution(int[] arr) {
ArrayList<Integer> answer = new ArrayList<>();
int l = -1,r = -1;
for(int i = 0; i < arr.length; i++) {
if(arr[i] == 2) {
l = i;
break; // 가장 왼쪽 2를 찾음
}
}
for(int i = arr.length - 1; i >= 0; i--) {
if(arr[i]==2) {
r = i;
break; // 가장 오른쪽 2를 찾음
}
}
if(l == -1 && r == -1) {
answer.add(-1);
} else{
for(int i = l; i <= r; i++) {
answer.add(arr[i]);
}
}
return answer;
}
}
👀 Arrays.copyOfRange() 메서드
원본 배열의 일부를 복사하여 새로운 배열을 반환
public static int[] copyOfRange(int[] original, int from, int to)
- original: 원본 배열
from: 복사를 시작할 인덱스 (포함)
to: 복사를 끝낼 인덱스 (제외)
예를 들어, 아래 코드에서는 arr 배열에서 인덱스 2부터 5까지의 부분 배열을 새로운 배열로 복사하여 반환한다.
int[] arr = {10, 20, 30, 40, 50, 60, 70};
int[] slicedArray = Arrays.copyOfRange(arr, 2, 6);
arr 배열의 인덱스 2부터 5까지의 요소는 {30, 40, 50, 60}이므로, slicedArray는 {30, 40, 50, 60}이 된다.
이러한 배열 슬라이싱을 통해 필요한 부분 배열을 간편하게 추출할 수 있다.
'자료구조&알고리즘 > 프로그래머스' 카테고리의 다른 글
[Programmers] 순서 바꾸기 (JAVA, PYTHON) (0) | 2023.10.09 |
---|---|
[Programmers] n 번째 원소부터 (JAVA, PYTHON) (0) | 2023.10.09 |
[Programmers] 리스트 자르기 (JAVA, PYTHON) (0) | 2023.09.23 |
[Programmers] 글자 지우기 (JAVA, PYTHON) (0) | 2023.09.21 |
[Programmers] 배열 만들기 1 (0) | 2023.09.21 |