자바 35

[정렬 연습] 삽입 정렬의 원리 및 구현 - Java

삽입 정렬이란? 삽입 정렬은 주어진 데이터들을 순회하면서 특정 데이터를 적절한 위치에 삽입하는 방식으로 정렬한다. 이때 마법의 단어 '적절한'이 들어갔는데, 이 단어가 이전에 다루었던 버블 정렬과 선택 정렬과의 차이를 낳는다. 이전에 다루었던 버블 정렬과 선택 정렬의 경우, 주어진 데이터의 정렬 상태 등에 상관없이 항상 모든 요소를 순회하면서 비교하는 비효율적인 문제가 있었다. 하지만 삽입 정렬의 경우, 순회 중 특정 데이터를 삽입할 적절한 위치를 찾으면 삽입 후 기존 순회를 중단하고 다음 순회로 넘어간다. 이로써 기존 데이터의 상태가 어느정도 정렬된 상태라면, 더욱 빠른 속도로 정렬할 수 있게 된다. 그림으로 삽입 정렬의 원리 이해하기 아래와 같이 최초 정렬되지 않은 크기 10의 정수형 배열이 있다고 ..

Algorithm/Basic 2022.09.07

[정렬 연습] 버블 정렬과 선택 정렬의 원리 및 구현 - Java

버블 정렬이란? 버블 정렬은 정렬 알고리즘 중에서 가장 원시적인 방법으로서 주어진 데이터들을 순회하면서 서로 붙어있는 2개의 데이터씩 비교해, 하나씩 맨 뒤에 차곡차곡 옮겨놓는 방식으로 정렬한다. 그림으로 버블 정렬의 원리 이해하기 아래와 같이 최초 정렬되지 않은 크기 10의 정수형 배열이 있다고 가정했을 때, 버블 정렬을 통해 오름차순으로 정렬해보자. 우선 맨 앞에서부터 서로 붙어있는 2개의 데이터씩 비교를 하는데, 작은 값을 왼쪽에 큰 값을 오른쪽에 옮겨나가면서 배열을 순회한다. 이때 순회의 마지막 지점에서 이루어지는 비교는 주어진 배열에서 가장 큰 값을 배열 맨 뒤에 옮겨놓는 것이 된다. 즉, 맨 마지막 요소는 정렬이 되었다고 볼 수 있으므로 맨 마지막 인덱스 직전까지 앞선 작업들을 반복해나간다. ..

Algorithm/Basic 2022.09.06

[프로그래머스] 디스크 컨트롤러 - Java

문제 설명 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 접근 방법 해당 문제는 우선순위 큐를 활용하여 해결할 수 있었습니다. 문제 조건 분석 문제에서는 각 작업별로 최초 요청 시간과 작업 시간이 주어졌을 때, 각 작업별로 요청되는 시간부터 작업이 종료되는 시간(이하 '처리 시간' = 대기 시간 + 실행 시간)의 '최소' 평균을 요구하고있습니다. 이때 각 작업별 처리 시간 동안 작업의 상태를 다음과 같이 나타내볼 수 있겠습니다. 여기서 실행 시간은 고정되어있는 값으로, 각 작업별 처리 시간의 최소 평균을 구하기 위해서는 대기 상태를 최대한 줄이는 노력이 ..

Java의 상속에 대해 파헤쳐보자!

상속이란? 상속은 객체지향 4대 특성 중 하나의 특성인데, 상속이란 기존의 클래스(상위 클래스)를 '재사용 및 확장'한 새로운 클래스(하위 클래스)를 작성하는 것이다. 여기서 '재사용'이라는 표현을 사용했는데, 이는 상위 클래스의 멤버(변수, 메서드)를 하위 클래스가 모두 상속받아 (재)사용할 수 있기 때문이다. 이때 상위 클래스의 생성자나 초기화 블럭은 상속되지 않는다. 만일 여러 클래스들이 있을 때 '공통되는 멤버'가 있다면 상속 관계를 적용할 수 있는지 생각해볼 법하다. 또한 '확장'이라는 표현을 사용했는데, 이는 하위 클래스가 상위 클래스로부터 상속받은 멤버에 더해서 추가적인 멤버를 작성할 수 있기 때문이다. (메서드를 오버라이딩함으로써 재정의할수도 있다.) 이때 새롭게 추가되는 멤버는 상위 클래..

Technology/Java 2022.08.27

Java final 키워드의 여러가지 쓰임새

final 키워드란? final이란 '마지막'이라는 뜻을 가지고 있는데, 실제 자바에서 쓰임새도 이 의미와 유사하게 사용된다. 이때 final 키워드가 사용될 수 있는 대상은 '클래스', '메서드', '변수' 세가지 뿐으로 각각의 경우에 대해 알아보자. 클래스에 사용되는 final 클래스에 final 키워드가 사용되면 해당 클래스는 상속받을 수 없게 된다. 대표적인 final class에는 java.lang 패키지에서 제공하는 String 클래스와 Math 클래스가 있다. public final class Math { // ... public final class String implements java.io.Serializable, Comparable, CharSequence { // ... 이러한 f..

Technology/Java 2022.08.26