반응형
요즘 다시 알고리즘 공부를 시작하려고 하여
백준에서 문제를 풀어나가며 알고리즘을 따로 정리, 기술하는 방향으로 계획하고 있다.
그 중 정렬 알고리즘을 먼저 살펴보려고 하며,
오늘은 기본 중 하나인 선택 정렬를 알아보고자 한다.

선택 정렬 ( Selection Sort )

 

선택 정렬은 간단하지만 비효율적인 정렬 알고리즘 중 하나로, 배열에서 가장 큰 or 가장 작은 값을 찾아 현재 위치에 배치하는 과정을 반복하여 정렬된다.

 

순서는 다음과 같다.

 

1. 정렬되지 않은 부분에서 최솟값 or 최댓값 찾기

 

2. 현재 위치와 최솟 값 or 최대 값 교환

 

3. 다음 위치로 이동하며 반복


 

다음 그림과 같이 예시로 알아보자

5개의 정수 값을 가진 배열 Array가 존재한다.

이를 오름차순으로 왼쪽부터 최솟값을 찾아 정렬하고자 한다.

 


 

기본 형태

4 5 3 1 2

 


1회차

 

첫번 째 위치인 4를 기준

4 5 3 1 2

 

 

차례로 5, 3, 1, 2 와 비교

4 5 3 1 2

 

 

최솟값을 찾아 위치를 교환

4 5 3 1 2

 

 

1회차 완료

1 5 3 4 2

 


 

2회차

 

두번 째 위치인 5를 기준

1 5 3 4 2

 

 

차례로 3, 4, 2 와 비교

1 5 3 4 2

 

 

최솟값을 찾아 위치를 교환

1 5 3 4 2

 

 

2회차 완료

1 2 3 4 5

 

 

2회차만에 정렬되어 정렬된 배열은 다음과 같다.

1 2 3 4 5

전체 코드

import java.util.Arrays;

public class Main {
    public static void main(String[] args) {
        int [] arr = {6,4,2,1,3,5};
        selectionSort(arr);
        Arrays.stream(arr).forEach(System.out::println);
    }

    private static void selectionSort(int[] arr) {
        if(arr == null || arr.length < 2) {
            return;
        }

        int minIndex;
        for(int i = 0; i < arr.length - 1; i++) {
            minIndex = i;
            for(int j = i + 1; j < arr.length; j++) {
                if(arr[j] < arr[minIndex]) {
                    minIndex = j;
                }
            }

            if(minIndex != i) {
                int temp = arr[minIndex];
                arr[minIndex] = arr[i];
                arr[i] = temp;
            }
        }
    }
}

 

 

구현은 쉽고 직관적이긴 하나,  선택 정렬은 앞서 말했듯 입력 배열에 관계없이(2회차에 정렬이 되었더라도)
외부 반복문에서 n -1 회, 내부 루프에서 n - 1, n - 2, ..., 1번 비교함으로
시간복잡도는 항상 O(n^2) 으로 비효율적이다. 

 

반응형
반응형

 

새로운 개발 환경에서 시작하는 일이 잦다 보니
개발 필수 도구들을 설치하는 것에 대한 가이드라인을 작성해보려고 한다.
간단한 설치와 환경 변수 설정까지 단계별로 다루겠다.

1. JAVA 다운로드 및 설치 준비

1-1. 설치 파일 다운로드

  • 오라클 홈페이지에서 JDK(JAVA Development Kit) 버전과 운영체제에 맞는 파일을 다운로드 해줍니다.
  • 윈도우 11부터는 32비트 지원을 제공하지 않기 때문에 윈도우 최신 자바 버전도 64비트만 존재합니다.

특징 Compressed Archive Installer MSI Installer
설치 과정 수동 설치 GUI 설치 마법사 Windows Installer
환경 변수 설정 여부 수동 설정 자동 설정 자동 설정
운영체제 지원 Windows, macOS, Linux Windows, macOS, Linux Windows 전용

 

어떤 것을 다운로드 해도 상관없으나

Windows 환경 기준으로 MSI 설치파일을 사용하면 환경변수까지 자동으로 설정해주기 때문에 MSI Installer를 추천한다.

+

기본적으로 Installer, MSI Installer는 C:\Program\Files\Java 파일경로에 설치되고

Compressed Archive는 직접 파일 경로를 설정하고 설치한다.

 

 

Download the Latest Java LTS Free

Subscribe to Java SE and get the most comprehensive Java support available, with 24/7 global access to the experts.

www.oracle.com

 

1-2. 설치 완료 후 확인

  • 아래 작업표시줄 검색에 명령 터미널, 프롬포트나 cmd를 검색해 실행한다.
  • 다음 명령어를 통해 자바가 설치되었는지 확인한다.

java -version

 

다음과 같이 버전 정보가 표시되면 설치가 성공적으로 완료되었다. 

하지만 version이 확인 되지 않는다면 환경 변수가 설정되지 않았기 때문이다. 

다음 환경 변수 설정을 보자


2. 환경 변수 설정 (Windows 기준)

2 - 1. 작업 표시줄 검색창에 "환경 변수 편집"을 입력하고 선택

2 - 2. "환경 변수" 클릭

2 - 3. 새로 만들기 클릭하고 다음과 같이 입력 ( 파일 위치에 맞게 되어있는지 검토하셔야 합니다. )

C:\Program Files\Java\jdk-23

2 - 4. "Path" 찾아서 더블 클릭

새로만들기를 통해 다음과 같은 항목을 추가해 준다.

%JAVA_HOME%\bin

 

 

3. VS Code 설치

3 - 1. Visual Code 설치

 

Visual Studio Code - Code Editing. Redefined

Visual Studio Code is a code editor redefined and optimized for building and debugging modern web and cloud applications. Visual Studio Code is free and available on your favorite platform - Linux, macOS, and Windows.

code.visualstudio.com

다음 사이트를 통해 VS Code를 다운 받아준다.

3 - 2. 유용한 Extensions (확장 프로그램) 추가

다음과 같은 확장 프로그램을 검색을 통해 추가해 주면 좋다.

필수 확장 프로그램

1. Language Support for Java(TM) by Red Hat

  • 기본 Java 언어 지원 (코드 완성, 오류 탐지, 문법 강조 등).

2. Debugger for Java

  • Java 애플리케이션 디버깅 지원

3. Java Extension Pack

  • Red Hat Java 확장과 관련된 모든 패키지 한번에 설치 가능

 

Java 개발에 유용한 확장 프로그램은 다양하지만,
중복되거나 너무 많은 확장 프로그램을 설치하면 혼란을 야기할 수 있다.
따라서 본인의 개발 환경과 필요에 따라 적절한 확장 프로그램을 선택하고 사용하는 것이 중요하다

필수적인 도구만 설치하여 효율적이고 깔끔한 개발 환경을 유지하는 것을 추천한다.

  1.  
반응형
반응형

 

JAVA 에서는 System.out과 System.err는 출력 스트림(Output Stream)으로 각각 특정 목적과 동작 방식에 맞게 사용됩니다. 그 두가지에는 무슨 차이점이 있는지 알아보겠습니다.

 

System.out 특징

  • 일반 출력용 스트림으로, 프로그램의 정상적인 실행 결과를 출력
  • 출력 내용을 버퍼(buffer)에 임시 저장 후 특정 조건에 한 번에 출력
  • 이로 인해 출력 순서가 보장되지 않을 수 있습니다.

 

System.err 특징

  • 에러 출력용 스트림으로 에러나 크리티컬한 상황에 대한 기록
  • 중요한 메시지를 즉각적으로 보여주기 위해 자동으로 출력
  • 따라서 실행 중 바로 확인 가능하며, 디버깅 시 유용하게 사용될 수 있습니다.

 

예시

코드

System.out.println("3 x 3 = ");
System.out.err("9");

 

출력 예시

9
3 x 3 =

 

 


 

구분 System.out System.err
역할 일반적인 출력용 스트림 오류 및 예외 상황을 위한 출력용 스트림
의미 프로그램의 정상적인 실행 결과를 보여줌 에러 상황을 사용자나 개발자에게 전달
사용 목적 결과 메시지, 정보 출력 오류 로그, 경고 메세지 출력
출력 시 지연 출력 즉시 출력

 

반응형

+ Recent posts