JAVA/코드

코드리뷰 ①- 선택정렬

record2080 2025. 1. 9. 23:22

package work;

import java.util.Random;
import java.util.Scanner;

public class Main {

      public static int getNumber() {
      Scanner scanner = new Scanner(System.in);
      int n; 
      while (true) { // 사용자가 올바른 숫자를 입력할때까지 계속 물어보기
         System.out.print("정렬할 숫자의 개수를 입력하세요 (3 이상, 10 이하): ");
         n = scanner.nextInt(); //입력받을 숫자 저장 => n 
         if (3<= n && n <= 10) {
            break;  // 숫자가 3 이상, 10이하를 입력하면 while문을 빠져나감
         }
         System.out.println("숫자는 3 이상 10 이하 합니다. 다시 입력해주세요.");
         // 만약 그렇지않으면 "다시 입력해주세요" 문구를 출력
      }
      return n;  // 입력 받은 값을 반환
   }

   // 2. 1부터 100 사이의 랜덤 숫자 생성하는 함수 //4유형 Input   Output
   public static int[] randomArray(int size) {     //size라는 매개변수를 받으므로 input이 존재
      Random random = new Random();
      int[] arr = new int[size];   //여러 숫자를 저장할 arr 변수를 선언하고, size만큼의 공간을 가짐
      for (int i = 0; i < arr.length; i++) { // 배열의  길이
         arr[i] = random.nextInt(100) + 1; // 1부터 100 사이의 랜덤 숫자 생성
      }
      return arr; //만들어진 랜덤 배열 값을 반환
   }

   // 3. 배열 출력 함수
   public static void printArray(int[] arr, String message) { //배열을 출력하고,배열과 함께 출력할 메시지도 받음
      System.out.println(message);
      for (int num : arr) {  // 배열 속 숫자 출력
         System.out.print(num + " "); // 배열의 요소를 출력
      }
      System.out.println(); // 줄 바꿈
   }

   // 4. 선택 정렬 알고리즘 함수
   public static void selectionSort(int[] arr) { //입력을 받고 출력만 하니까
      int n = arr.length;
      // 배열의 첫 번째 값부터 마지막 값까지 반복
      for (int i = 0; i < n - 1; i++) {
         int minIndex = i; // 현재 인덱스를 최소값 인덱스로 설정
         // 현재 인덱스 이후의 배열에서 최소값을 찾기 위한 반복
         for (int j = i + 1; j < n; j++) {
            if (arr[j] < arr[minIndex]) { // 더 작은 값을 찾으면
               minIndex = j; // 최소값 인덱스를 업데이트
            }
         }
         // 최소값이 현재 위치에 있지 않으면 교환
         if (minIndex != i) {
            int temp = arr[minIndex];
            arr[minIndex] = arr[i];
            arr[i] = temp;
         }
      }
   }
   //매개변수가 있다면 Input O
   //반환값이 있다면 Output O
   // 메인 함수
   public static void main(String[] args) {
      // 1. 사용자 입력 받기 -3유형 Output
      int size = getNumber(); // 값에 의한 호출

      // 2. 랜덤 숫자 생성  - 4유형 Input   Output
      int[] arr = randomArray(size); //배열 길이 정하기


      // 3. 생성된 배열 출력 - 2유형 Input
      printArray(arr, "생성된 배열:"); // 입력받은 개수만큼 랜덤 숫자 생성

      // 4. 선택 정렬 알고리즘 실행 - 2유형 Input
      selectionSort(arr);  // 만들어진 랜덤 숫자들을 화면에  보여짐

      // 5. 정렬 완료된 배열 출력 - 2유형 Input
      printArray(arr, "정렬 후 배열:");
   }
}