본문 바로가기
  • 개발하는 곰돌이

전체 글222

[Kotlin] 백준 12785 : 토쟁이의 등굣길 문제 링크 12785번: 토쟁이의 등굣길 인하대학교에 다니는 토쟁이는 y축과 평행한 w개의 도로, x축과 평행한 h개의 도로가 있는 도시에 살고 있다. 토쟁이의 집은 이 도시의 맨 왼쪽 아래에 위치하며 좌표로는 (1, 1)로 표시할 수 있다. www.acmicpc.net 문제 해설 최단 경로 문제다. 토쟁이의 집부터 토스트 가게까지의 최단경로와 토스트 가게부터 학교까지의 최단경로를 구하여 두 값을 곱한 결과를 1,000,007로 나눈 나머지를 출력하면 된다. 최단 경로 문제는 조합으로 해결할 수 있다. 위와 같은 모양의 지도가 있을 때 start에서 end까지 이동하는 최단 경로의 수는 →오른쪽 5개와 ↑위쪽 3개로 이루어진 집합에서 5개의 →오른쪽이나 3개의 ↑위쪽을 뽑는 경우의 수가 된다. 따라서 위.. 2022. 12. 14.
오버로딩(Overloading) vs 오버라이딩(Overriding) 개요 Java와 Kotlin에서는 다형성을 위해 메소드의 오버로딩과 오버라이딩이 가능하다. 이 두 개념은 전혀 다른 개념이지만 용어가 비슷하기 때문에 잘 구분하는 것이 좋다. 오버로딩(Overloading) : 메소드의 파라미터 개수나 타입을 다르게 하여 같은 이름의 메소드를 여러 개 작성하는 방법 오버라이딩(Overriding) : 부모 클래스의 메소드를 자식 클래스에서 재정의 또는 구현하여 사용하는 방법 메소드의 오버로딩 오버로딩(Overloading). 단어 의미 그대로 해석하자면 과적재라는 뜻이다. 쉽게 생각하면 원래 하나의 메소드는 하나의 기능을 수행해야 하지만 파라미터의 개수나 타입만 다르고 수행하는 동작이 비슷할 경우에는 이 메소드의 이름을 그대로 사용하여 여러 파라미터에 대한 동작이 과적재.. 2022. 12. 13.
Kotlin 기본 문법 7 : 추상 클래스/인터페이스와 클래스의 상속 목차 개요 Kotlin도 Java와 마찬가지로 추상 클래스와 인터페이스가 존재하고 클래스에서 다른 클래스를 상속하거나 인터페이스를 구현할 수 있다. 이번 포스트에서는 Kotlin의 추상 클래스/인터페이스와 클래스의 상속에 대해 정리한다. Kotlin의 추상 클래스 Kotlin의 추상 클래스는 Java와 마찬가지로 abstract class 키워드를 사용하여 작성한다. 추상 클래스를 작성하는 방법은 일반적인 클래스를 작성하는 것과 동일하게 작성하고 class 대신 abstract class를 사용하면 된다. 클래스를 작성하는 기본적인 방법을 제외하면 Java와 같다. // Java abstract class Animal { String name; public Animal(String name) { this.. 2022. 12. 13.
[Kotlin] 백준 26215 : 눈 치우기 문제 링크 26215번: 눈 치우기 집 2와 집 3 앞의 눈을 치우고, 집 2와 집 3 앞의 눈을 치우고, 집 1과 집 3 앞의 눈을 치운 뒤 집 3 앞의 눈을 두 번 치우면 5분만에 모든 집 앞의 눈을 치울 수 있다. www.acmicpc.net 문제 해설 정렬을 이용하여 풀 수 있는 문제다. 우선 문제의 조건에 따라 분당 치울 수 있는 눈은 한집만 1 또는 두 집에서 각각 1씩, 총 2를 치울 수 있다. 따라서 한 집 앞에 쌓인 눈의 양이 1440을 초과한다면 무슨 수를 쓰더라도 24시간 내에 치울 수 없기 때문에 -1을 출력하고 프로그램을 종료한다.(코드의 11~14번째 줄) 그 외의 경우는 각 집 앞에 눈이 쌓인 양을 내림차순으로 정렬하여 해결한다. 눈이 쌓인 양이 가장 많은 집과 두 번째로 많이.. 2022. 12. 12.
[Kotlin] 백준 15595 : 정답 비율 계산하기 문제 링크 15595번: 정답 비율 계산하기 첫째 줄에 어떤 문제의 총 제출 횟수 N(1 ≤ N ≤ 200,000)이 주어진다. 둘째 줄부터 N개의 줄에 각 제출의 정보가 제출 번호 순서대로 주어진다. 제출 정보는 총 7가지가 공백 하나로 구분되어져 있 www.acmicpc.net 문제 해설 BOJ의 정답 비율을 계산하는 알고리즘을 직접 구현해보는 문제다. 입력에 많은 정보가 있지만 문제의 조건을 봤을 때 필요한 것은 문제를 맞은 사람의 수, 문제를 맞은 사람이 이전까지 틀린 횟수, 문제를 맞은 사람의 유저 아이디만 있으면 된다. 우선 문제를 맞은 사람이 이전까지 틀린 횟수를 계산하기 위해 HashMap을 사용했다. 문제를 아무리 많이 틀려도 해당 유저 아이디가 최종적으로 문제를 맞추지 못한다면 분모에 .. 2022. 12. 10.
Kotlin에서 두 객체의 비교(CompareTo) 개요 Java에서는 두 객체를 비교하려면 Comparable 인터페이스의 CompareTo() 메소드를 구현하여 객체를 비교해야 했다. Kotlin에서도 마찬가지로 두 객체를 비교하려면 Comparable 인터페이스의 CompareTo() 메소드를 구현해야 하는것은 동일하지만 이 과정만 수행해놓으면 훨씬 직관적으로 두 객체를 비교할 수 있다. 이에 대해 알아보도록 하자. Comparable 인터페이스의 CompareTo() 메소드는 현재 객체와 파라미터로 받은 객체 사이의 특정 연산을 통해 결과가 양수이면 현재 객체가 더 크고, 결과가 음수이면 현재 객체가 더 작다고 판별한다. Java에서의 두 객체 비교 Java에서 두 객체를 비교하려면 객체의 클래스에서 Comparable 인터페이스의 CompareT.. 2022. 12. 9.
[Kotlin] 백준 1270 : 전쟁 - 땅따먹기 문제 링크 1270번: 전쟁 - 땅따먹기 첫째 줄에는 땅의 개수 n(n t / 2) when (strongest?.sign ?: 0) { 1.toByte() -> "-${strongest}\n" else -> "${strongest}\n" } else "SYJKGW\n") military.clear() } println(sb) } class Military(var num: UInt, var sign: Byte) { override fun toString() = "${this.num}" override fun equals(other: Any?) = this.num == (other as Military).num && this.sign == other.sign override fun hashCode() = .. 2022. 12. 9.
Kotlin에서 한 줄로 받은 입력을 여러개의 변수에 할당하는 방법(구조 분해) Java에서는 한 줄로 받은 입력을 여러개의 변수에 할당하려면 Scanner 클래스의 next()로 변수마다 하나씩 할당해주거나 BufferedReader 클래스의 readLine()으로 한 줄을 입력받은 후 split()이나 StringTokenizer로 입력을 분할하여 하나씩 할당해줘야 했다. 하지만 Kotlin에서는 똑같이 한 줄로 입력을 받았을 때, 최대 5개까지의 변수를 한 줄의 코드로 할당할 수 있다. Scanner sc = new Scanner(System.in); int a = sc.nextInt(); int b = sc.nextInt(); int c = sc.nextInt(); int d = sc.nextInt(); int e = sc.nextInt(); BufferedReader br .. 2022. 12. 8.