짝수 길이 의 0 인덱스 정수 배열이 제공되며 빈 배열도 있습니다 . 앨리스와 밥은 매 라운드마다 앨리스와 밥이 한 번씩만 움직이는 게임을 하기로 결정했습니다. 게임의 규칙은 다음과 같습니다.numsarr
결과 배열을 반환합니다 arr.
예시1
입력: nums = [5,4,2,3]
출력: [3,2,5,4]
설명: 1라운드에서 먼저 Alice가 2를 제거하고 Bob이 3을 제거합니다. 그런 다음 arr에서 Bob이 먼저 3을 추가하고 그 다음 Alice가 추가합니다. 2를 추가합니다. 따라서 arr = [3,2]입니다.
두 번째 라운드 시작 시 nums = [5,4]입니다. 이제 먼저 Alice가 4를 제거하고 Bob이 5를 제거합니다. 그런 다음 둘 다 arr에 추가되어 [3,2,5,4]가 됩니다.
예시2
입력: nums = [2,5]
출력: [5,2]
설명: 1라운드에서 먼저 Alice가 2를 제거한 다음 Bob이 5를 제거합니다. 그런 다음 arr에서 먼저 Bob이 추가하고 그 다음 Alice가 추가합니다. 따라서 arr = [5,2]입니다.
class Solution {
public int[] numberGame(int[] nums) {
// 주어진 배열을 ArrayList 변환
ArrayList<Integer> numList = new ArrayList<>();
for (int num : nums) {
numList.add(num);
}
// 결과를 지정할 배열
ArrayList<Integer> result = new ArrayList<>();
// 배열이 비어있지 않을 때까지 반복
while (!numList.isEmpty()) {
// Alice가 최소 요소 제거 및 추가
int minIndex = getMinIndex(numList);
int aliceValue = numList.remove(minIndex);
// 배열이 비어있다면 bob의 차례 생략
if (numList.isEmpty()) {
result.add(aliceValue);
break;
}
// bob이 최소 요소 제거 및 추가
minIndex = getMinIndex(numList);
int bobValue = numList.remove(minIndex);
// bob이 먼저 arr에 추가하고, 그 다음 alice가 추가
result.add(bobValue);
result.add(aliceValue);
}
// 결과 배열을 int 배열로 변환해서 반환
int[] resultArr = new int[result.size()];
for (int i = 0; i < result.size(); i++) {
resultArr[i] = result.get(i);
}
return resultArr;
}
// 최소 요소 인텍스를 찾는 메서드
private static int getMinIndex(ArrayList<Integer> list) {
int minIndex = 0;
for (int i = 1; i < list.size(); i++) {
if (list.get(i) < list.get(minIndex)) {
minIndex = i;
}
}
return minIndex;
}
}
ArrayList 메서드
add, remove, size, get 메서드를 활용
반복문으로 배열이 빌 때까지 안의 코드를 수행되도록 작성하는 방법이 익숙해지려면 많이 노력해야 겠다. 그래도 공통적으로 사용하는 코드는 메서드로 빼는 것은 익숙해진 듯하다. 내가 익숙해지는 범위가 많아질 수록 공부가 확장될 수 있다는 점들이 너무 두근거린다 ! 이렇게 오늘도 한 걸음 내딛기 성공 😊👍