본문 바로가기

분류 전체보기

(308)
[Kotlin] 객체 (Object) + 항공대학교 김철기 교수님의 객체 지향 프로그래밍 과목 내용를 정리한 글입니다. 객체 (object) - 오직 하나의 인스턴스만 존재하는 클래스는 object라는 키워드로 정의하며 객체라 부른다. - 객체는 선언과 동시에 인스턴스가 생성된다. (객체 이름 = 타입 이름 = 인스턴스 이름) object Application { // 타입 이름이자 객체 이름 val name = "My Application" override fun toString() = name // 객체의 이름 반환 // toString 은 이미 상위 클래스에서 사용되고 있으므로 override 사용 (모든 객체는 toString 함수를 갖고 있다.) fun exit() {} // 빈 함수 } fun main() { println(App..
[Kotlin] 단순한 변수 이상인 프로퍼티 + 항공대학교 김철기 교수님의 객체 지향 프로그래밍 과목 내용를 정리한 글입니다. 최상위 프로퍼티 - 클래스에 소속되지 않은 프로퍼티는 전역 변수/상수의 역할을 한다. - public/internal/private 등의 가시성 지정이 가능하다. private val prefix = "Hello, " // 전역 변수 // private 선언이기 때문에 다른 파일에서는 호출이 불가능하다. fun main() { val name = readLine()?: return // null이면 return println("$prefix $name") } 늦은 초기화 (lateinit) - 생성자에서 초기화되지는 않지만, 프로그램 흐름 상 실사용 시 초기화되는 것이 명백한 변수에는 lateinit이라는 예약어로 표기하여..
[Algorithm] 정렬: 병합 정렬, 퀵 정렬 + 항공대학교 이인복 교수님의 알고리즘 해석 및 설계 과목 내용를 정리한 글입니다. 분할 정복 기법 (Divide-and-Conquer) 문제의 크기가 커지면 더 풀기가 어렵다. => Divide: 원래 문제를 독립적으로 풀 수 있는 작은 문제로 나눈다. => Delegate: 각각의 문제를 푼다. => Combine: 각각의 문제의 답을 이용하여 원래 문제의 답을 만든다. 정렬 문제에 대한 분할 정복 기법 1. 병합 정렬 (Mergesort) 2. 퀵 정렬 (Quicksort) 병합 정렬 Divide: 정렬할 리스트를 앞쪽 반, 뒤쪽 반으로 나눈다. Delegate: 앞쪽 반을 정렬한다. Delegate: 뒤쪽 반을 정렬한다. Combine: 이 둘을 합쳐서 하나의 정렬된 리스트를 만든다. - 앞쪽 반..
[Algorithm] 정렬: 버블 정렬, 삽입 정렬 + 항공대학교 이인복 교수님의 알고리즘 해석 및 설계 과목 내용를 정리한 글입니다. 정렬 문제 => n개의 서로 다른 수가 주어졌을 때, 이들을 이동하여 점점 커지게(오름차순), 또는 점점 작아지게(내림차순) 만드는 문제 ex) 9, 3, 5, 7 => 3, 5, 7, 9 - 한 문제를 풀기 위해서 여러가지 방법이 가능하다. - 방법마다 특징이 다르다. - 기본적인 문제이면서, 실생활에 자주 쓰인다. - 시간 복잡도, 최적성에 대해서 증명이 쉽다. 정렬할 데이터가 담긴 배열의 각 원소를 O(1) 시간에 접근 가능하다고 가정한다. (데이터가 메인 메모리에 저장되어 있다고 가정한다.) 버블 정렬 1. 맨 왼쪽 원소부터 바로 이웃한 원소와 비교해 가면서, 큰 수가 오른쪽으로 가도록 교환한다. 2. 맨 끝까지 ..
[Algorithm] 알고리즘 기초 (3) + 항공대학교 이인복 교수님의 알고리즘 해석 및 설계 과목 내용를 정리한 글입니다. 탐색 문제 1 정렬되지 않은 배열 E[1...n]에서, 어떤 값 k가 있는지 찾으시오. 만약 있다면 E[i]=k인 i를, 없으면 -1을 출력하라. ans = -1 E = list(map(int, input().split())) k = int(input()) for i in range(len(E)): if k == E[i]: ans = i break print(ans + 1) => 모든 원소를 하나씩 k 값인지 탐색 비교를 한 번 할 때마다, 원소 한개가 답인지 아닌지를 알 수 있다. 따라서 총 n번의 비교가 필요하다. - 비교를 하지 않으면 답인지 아닌지 알 수 없다. - n번 비교를 하지 않으려면 공짜로는 되지 않는다...
[백준/Python] 18353번: 병사 배치하기 문제 https://www.acmicpc.net/problem/18353 18353번: 병사 배치하기 첫째 줄에 N이 주어진다. (1 ≤ N ≤ 2,000) 둘째 줄에 각 병사의 전투력이 공백을 기준으로 구분되어 차례대로 주어진다. 각 병사의 전투력은 10,000,000보다 작거나 같은 자연수이다. www.acmicpc.net 문제 요약 N명의 병사들이 무작위로 나열되어 있고, 각 병사들은 전투력을 갖고 있다. 병사를 배치할 때는 전투력이 높은 병사가 앞쪽에 오도록 내림차순으로 배치를 해야한다. 남아 있는 병사의 수가 최대가 되도록 하기 위해서 열외해야 하는 병사의 수를 출력한다. 코드 N = int(input()) arr = list(map(int, input().split())) dp = [1] * ..