인프런 워밍업 클럽 2기 - CS 전공지식 스터디 특별미션
특별미션 특별 미션) 실수로 워밍업 클럽 출석을 빼먹었는데 우연히 데이터를 수정할 수 있는 권한이 주어졌습니다. 러너분의 이름(name)과 출석수(count)가 저장된 배열에서 여러분(나)의 데이터를 퀵정렬을 이용해 오름차순 정렬하고 가장 첫 번째 데이터인 여러분의 출석수를 변경하도록 코드를 작성해주세요. (퀵정렬 구현 부분도 변경) import java.util.Arrays; public class QuickSort { public static void main(String[] args) { User[] arr = { new User("홍길동", 5), new User("임꺽정", 4), new User("이순신", 3), new User("나", 1), new User("짱구", 5) }; System.out.println("===== 정렬 전 ====="); System.out.println(Arrays.toString(arr)); // 퀵정렬 실행 quickSort(arr, 0, arr.length - 1); // 첫 번째 나의 데이터의 출석수 변경 arr[0].count = 5; System.out.println("===== 정렬 후 ====="); System.out.println(Arrays.toString(arr)); } // 퀵정렬 함수 static void quickSort(User[] arr, int left, int right) { // 기저조건 if (left >= right) { return; } int pivotIndex = divide(arr, left, right); quickSort(arr, left, pivotIndex - 1); quickSort(arr, pivotIndex + 1, right); } // 배열을 나누고 피벗의 위치를 반환하는 함수 static int divide(User[] arr, int left, int right) { int pivot = arr[left].count; // 피벗은 첫 번째 원소의 count 값 int leftStartIndex = left + 1; int rightStartIndex = right; while (leftStartIndex <= rightStartIndex) { // 피벗보다 큰 값을 찾을 때까지 왼쪽에서 오른쪽으로 이동 while (leftStartIndex <= right && arr[leftStartIndex].count <= pivot) { leftStartIndex++; } // 피벗보다 작은 값을 찾을 때까지 오른쪽에서 왼쪽으로 이동 while (rightStartIndex >= left + 1 && arr[rightStartIndex].count >= pivot) { rightStartIndex--; } // 인덱스가 교차하지 않았으면 값 교환 if (leftStartIndex < rightStartIndex) { swap(arr, leftStartIndex, rightStartIndex); } } // 피벗과 rightStartIndex 교환 swap(arr, left, rightStartIndex); return rightStartIndex; } // 두 원소의 값을 교환하는 함수 static void swap(User[] arr, int index1, int index2) { User temp = arr[index1]; arr[index1] = arr[index2]; arr[index2] = temp; } } class User { String name; int count; User(String name, int count) { this.name = name; this.count = count; } @Override public String toString() { return "{name: '" + name + "', count: " + count + "}"; } } 문제를 해결하기 위한 퀵정렬을 수행하고 나의 출석수를 변경하는 코드를 Java로 작성했습니다.count 기준으로 정렬하고, 정렬된 배열의 첫 번째 데이터인 나의 출석수를 5로 변경하는 로직입니다.개인 일정때문에 첫번째 OT를 빠졌었는데, 구제될 수 있는 기회가 생겼네요.감사합니다.!!