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

Kotlin162

[Kotlin] 백준 11387 : 님 무기가 좀 나쁘시네여 문제 링크 11387번: 님 무기가 좀 나쁘시네여 각 줄마다 "공격력", "힘", "치명타 확률", "치명타 피해비율", "공격속도 증가"의 수치를 나타내는 다섯 개의 정수가 공백을 사이에 두고 순서대로 주어진다. 첫 번째 줄은 무기를 장착한 크리의 www.acmicpc.net 문제 해설 문제 자체는 단순한 구현 문제지만 주의할 점이 있다. 전투력을 계산할 때 실수 계산을 많이 하게 되는데 컴퓨터는 내부적으로 모든 수를 2진법으로 저장하기 때문에 소수점 이하 부분은 정확하게 저장할 수 없고 근사치를 저장하게 된다. 이 과정에서 여러번의 연산을 하다보니 오차가 발생하여 식은 맞지만 답은 틀리는 경우가 발생할 수 있다. 따라서 BigDecimal을 사용하여 오차 없이 계산해야 한다. 이점만 주의하면 크리와 .. 2022. 12. 15.
Kotlin 기본 문법 8 : 정적 변수와 정적 메소드(feat. companion object) 목차 개요 정적 변수와 정적 메소드는 클래스에 고정된 채로 프로그램이 실행될 때 클래스와 함께 메모리에 적재되어 객체를 생성하지 않고 호출할 수 있는 변수와 메소드를 의미한다. 이러한 정적 변수와 정적 메소드는 해당 클래스의 모든 객체가 공유하여 어디서든 참조가 가능하다. 이 포스트에서는 Kotlin에서 정적 변수와 정적 메소드를 선언하고 다루는 방법에 대해 정리한다. Kotlin에는 static 키워드가 없다 Java에서는 클래스 내부의 변수나 메소드 앞에 static을 붙이기만 하면 정적 변수나 정적 메소드로 선언할 수 있다. 하지만 Kotlin에서는 static이 존재하지 않고 다른 두 가지 방법으로 정적 변수와 정적 메소드를 작성할 수 있다. companion object Kotlin에서 정적 변.. 2022. 12. 14.
[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.