2의 영역
문제
- 정수 배열 arr이 매개변수로 주어집니다.
- 배열 안의 2가 모두 포함된 가장 작은 부분 배열을 출력하는 문제입니다.
- 입출력 예
-
arr result [1, 2, 1, 4, 5, 2, 9] [2, 1, 4, 5, 2] [1, 2, 1] [2] [1, 1, 1] [-1] [1, 2, 1, 2, 1, 10, 2, 1] [2, 1, 2, 1, 10, 2]
-
테스트 (인텔리제이)
- 배열에서 2와 2 사이의 모든 값을 새로운 배열로 출력하는 문제이기 때문에
- 첫 번째로 나오는 2와 마지막으로 나오는 2의 위치를 이용해 배열을 자르면 되지 않을까 생각하게 되었습니다.
- 그래서 indexOf 메서드와 lastIndexOf 메서드를 사용하여 인덱스 위치를 찾고 arr의 배열을 answer List에 담아 List의 subList 메서드를 이용하여 배열을 원하는 인덱스에 맞게 자르면 되겠다 생각했습니다.
- 풀이를 하면 for문으로 arr의 원소를 하나씩 꺼내 List로 선언된 answer에 담아줍니다.
- answer의 첫 번째로 나오는 2와 마지막으로 나오는 2의 위치를 찾기 위해 answer의 indexOf 메서드와 lastIndexOf 메서드를 이용하여 찾은 인덱스 번호를 담을 변수를 선언합니다..
(선언된List.indexOf(찾고자 하는 값), 선언된List.lastIndexOf(찾고자 하는 값) 이렇게 사용하면 됩니다. IndexOf는 파라미터에 넣어준 값의 가장 처음에 나오는 인덱스 번호를 반환해주고 lastIndexOf는 가장 마지막에 나오는 파라미터 값의 인덱스 번호를 반환해줍니다.
만약 파라미터 값이 해당 List에 없을 경우 -1을 반환합니다.) - if문으로 answer에 2가 없을 경우 Collections의 sigletonList 메서드에 -1을 담아 하나의 원소만 존재하는 배열을 출력하게 하고
- else에는 subList를 이용하여 배열을 잘라서 출력하게 해줍니다.
(선언된List.subList(첫 번째 인덱스, 두 번째 인덱스) 이렇게 사용하면 됩니다. 첫 번째 인덱스 부터 마지막 인덱스 전까지 잘라서 출력되기 때문에 원하는 배열을 반환받기 위해서는 마지막 인덱스에 +1을 해줘야 합니다.)
package com.namji.codingtest;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class _2의_영역 {
public static void main(String[] args) {
/*
정수 배열 arr이 매개변수로 주어집니다.
배열 안의 2가 모두 포함된 가장 작은 부분 배열을 출력하는 문제입니다.
입출력 예
arr result
[1, 2, 1, 4, 5, 2, 9] [2, 1, 4, 5, 2]
[1, 2, 1] [2]
[1, 1, 1] [-1]
[1, 2, 1, 2, 1, 10, 2, 1] [2, 1, 2, 1, 10, 2]
입출력 설명
#1
2가 있는 인덱스는 1번, 5번 인덱스뿐이므로 1번부터 5번 인덱스까지의 부분 배열인 [2, 1, 4, 5, 2]를 return 합니다.
#2
2가 한 개뿐이므로 [2]를 return 합니다.
#3
2가 배열에 없으므로 [-1]을 return 합니다.
#4
2가 있는 인덱스는 1번, 3번, 6번 인덱스이므로 1번부터 6번 인덱스까지의 부분 배열인 [2, 1, 2, 1, 10, 2]를 return 합니다.
*/
int[] arr = {1, 1, 1};
List<Integer> answer = new ArrayList<>();
for (int j : arr) {
answer.add(j);
}
int firstIndex = answer.indexOf(2);
int lastIndex = answer.lastIndexOf(2);
if (firstIndex == -1) {
System.out.println(Collections.singletonList(-1));
} else {
System.out.println(answer.subList(firstIndex, lastIndex + 1));
}
}
}
프로그래머스 코드
import java.util.*;
class Solution {
public List solution(int[] arr) {
List<Integer> answer = new ArrayList<>();
for (int j : arr) {
answer.add(j);
}
int firstIndex = answer.indexOf(2);
int lastIndex = answer.lastIndexOf(2);
if (firstIndex == -1) {
return Collections.singletonList(-1);
} else {
return answer.subList(firstIndex, lastIndex + 1);
}
}
}
'Coding Test > Java Coding Test' 카테고리의 다른 글
[프로그래머스 / 자바] - 수열과 구간 쿼리 4 (0) | 2024.07.23 |
---|---|
[프로그래머스 / 자바] - 리스트 자르기 (1) | 2024.07.22 |
[프로그래머스 / 자바] - 7의 개수 (0) | 2024.07.19 |
[프로그래머스 / 자바] - 세 개의 구분자 (0) | 2024.07.18 |
[프로그래머스 / 자바] - 수열과 구간 쿼리 3 (0) | 2024.07.15 |