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

전체 글222

[Kotlin] 백준 5430 : AC 문제 링크 5430번: AC 각 테스트 케이스에 대해서, 입력으로 주어진 정수 배열에 함수를 수행한 결과를 출력한다. 만약, 에러가 발생한 경우에는 error를 출력한다. www.acmicpc.net 문제 해설 리스트나 덱(Deque)을 이용해서 풀 수 있는 문제다. 풀이 과정은 두 방법 모두 동일하다. 가장 먼저 입력에서 [x1,...,xn] 형태로 주어진 배열을 덱에 삽입하기 위해 입력값을 파싱해줘야 한다. slice() 메소드로 입력의 시작과 끝에 있는 대괄호를 제외한 문자열을 만들고 콤마(,)를 구분자로 하여 각 정수값을 덱에 삽입한 후 주어진 함수 연산을 시작한다. 문제의 함수에서는 뒤집기 연산이라는 것이 있는데 R이 들어왔을 때 정말로 뒤집어서 계산하면 안된다. R이 들어올 때마다 뒤집기를 수.. 2022. 12. 4.
[Kotlin] 백준 7662 : 이중 우선순위 큐 문제 링크 7662번: 이중 우선순위 큐 입력 데이터는 표준입력을 사용한다. 입력은 T개의 테스트 데이터로 구성된다. 입력의 첫 번째 줄에는 입력 데이터의 수를 나타내는 정수 T가 주어진다. 각 테스트 데이터의 첫째 줄에는 Q에 적 www.acmicpc.net 문제 해설 처음에는 최대힙과 최소힙을 하나씩 만들어서 구현하려고 했는데 시간 초과가 났다. 제거 연산을 수행할 때 'D 1'이면 최대힙에서 제거한 값을 최소힙에서 remove()로 제거하고, 'D -1'이면 최소힙에서 제거한 값을 최대힙에서 같은 방법으로 제거하는 방식으로 구현했는데 저 remove() 과정에서 힙을 탐색해야 하다보니 시간을 초과한 것 같아서 다른 방법을 찾아보기로 했다. 그런 이유로 TreeMap을 이용하여 문제를 풀어보았는데 성.. 2022. 12. 4.
[Kotlin] 백준 1654 : 랜선 자르기 문제 링크 1654번: 랜선 자르기 첫째 줄에는 오영식이 이미 가지고 있는 랜선의 개수 K, 그리고 필요한 랜선의 개수 N이 입력된다. K는 1이상 10,000이하의 정수이고, N은 1이상 1,000,000이하의 정수이다. 그리고 항상 K ≦ N 이다. 그 www.acmicpc.net 문제 해설 2805 - 나무 자르기와 유사한 이진 탐색 문제다. 차이점은 목표치와 동일하면 바로 종료할 수 있던 나무 자르기와 달리 이 문제는 목표치(필요한 랜선의 개수)에 도달하더라도 랜선의 길이를 최대로 하기 위해 계속 검사를 해야한다는 점이다. Code fun main() = with(System.`in`.bufferedReader()) { val (k, n) = readLine().split(' ').map { it.. 2022. 12. 3.
[Kotlin] 백준 1874 : 스택 수열 문제 링크 1874번: 스택 수열 1부터 n까지에 수에 대해 차례로 [push, push, push, push, pop, pop, push, push, pop, push, push, pop, pop, pop, pop, pop] 연산을 수행하면 수열 [4, 3, 6, 8, 7, 5, 2, 1]을 얻을 수 있다. www.acmicpc.net 문제 해설 문제를 이해하기만 하면 스택을 이용하여 손쉽게 풀 수 있다. 예제 입출력의 경우를 예로 들어 보자. 4, 3, 6을 수열에 넣기 위한 동작을 그림으로 표현하면 다음과 같다. 그림에 대해 설명하자면 처음에 수열에 4를 추가해야 하는데 스택에 4가 없기 때문에 1, 2, 3, 4를 차례대로 삽입한다. 이후 스택의 맨 위에 있는 4를 제거하여 수열에 추가한다. 다음.. 2022. 12. 2.
[Kotlin] 백준 2108 : 통계학 문제 링크 2108번: 통계학 첫째 줄에 수의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 단, N은 홀수이다. 그 다음 N개의 줄에는 정수들이 주어진다. 입력되는 정수의 절댓값은 4,000을 넘지 않는다. www.acmicpc.net 문제 해설 주어진 입력으로부터 제시된 값들을 구하면 된다. 1, 2, 4는 손쉽게 구할 수 있지만, 최빈값을 구하고 최빈값이 여러개일 때 두 번째로 작은 값을 구하는 부분은 조금 생각을 해봐야 한다. 최빈값을 구하기 위해 수가 나타나는 빈도를 저장할 별도의 배열을 생성한다. 그리고 N개의 수를 입력받으면서 빈도를 저장할 배열에서 입력하는 수 + 4000을 인덱스로 하는 요소값을 1씩 증가시킨다. N개의 수 입력이 끝났다면 빈도수를 저장한 배열의 최대값이 2개 이상인.. 2022. 12. 2.
[Kotlin] 백준 4949 : 균형잡힌 세상 문제 링크 4949번: 균형잡힌 세상 하나 또는 여러줄에 걸쳐서 문자열이 주어진다. 각 문자열은 영문 알파벳, 공백, 소괄호("( )") 대괄호("[ ]")등으로 이루어져 있으며, 길이는 100글자보다 작거나 같다. 각 줄은 마침표(".")로 끝난다 www.acmicpc.net 문제 해설 스택을 이용하여 풀 수 있는 괄호 문제다. 문자열에서 괄호 외의 다른 문자는 모두 무시하고 괄호의 경우만 계산하면 되는데 모든 괄호가 짝을 이루되, 5번의 조건과 같이 괄호 내부에서도 괄호가 짝을 이뤄야 한다. 예를 들어 "[(])"의 경우는 대괄호 안에 소괄호는 왼쪽과 오른쪽이 모두 존재하지만 대괄호 사이에는 왼쪽 소괄호가, 소괄호 사이에는 오른쪽 대괄호가 있어서 짝을 이루지 못하므로 균형잡힌 문자열이 아니다. 스택을.. 2022. 12. 2.
[Kotlin] 백준 2805 : 나무 자르기 문제 링크 2805번: 나무 자르기 첫째 줄에 나무의 수 N과 상근이가 집으로 가져가려고 하는 나무의 길이 M이 주어진다. (1 ≤ N ≤ 1,000,000, 1 ≤ M ≤ 2,000,000,000) 둘째 줄에는 나무의 높이가 주어진다. 나무의 높이의 합은 항상 M보 www.acmicpc.net 문제 해설 상근이가 M미터 이상의 나무를 가져가면서 가져가는 나무의 양이 최소가 되는, 즉 절단기의 높이 H의 최대값을 구해야 한다. 단순하게 모든 경우를 하나씩 체크할 수도 있겠지만 나무의 최대 높이가 무려 10억이고 최대 나무의 수도 100만이나 되기 때문에 이렇게 하면 1초에 1억회의 계산을 한다고 해도 최대 1000만초(약 116일)라는 엄청난 시간이 걸린다. 따라서 더 효율적인 방법을 찾아야 한다. 이 .. 2022. 12. 2.
Kotlin 기본 문법 6 : 클래스와 접근 지정자 목차 개요 Kotlin은 JVM 기반이면서 객체지향 프로그래밍을 추구하는 언어인 만큼 클래스를 통해 객체를 생성하여 사용한다. 클래스와 객체의 차이는 아래와 같다. 클래스 : 객체들의 공통된 특성을 정의해놓은 틀 객체 : 클래스를 이용하여 생성하여 각자의 속성을 가진 개체 클래스와 객체의 예를 들면 다음과 같다. 자동차라는 클래스가 있으면 차종, 자동차번호 등은 모든 자동차가 공통적으로 갖는 특성이다. 이렇게 공통적으로 갖는 특징적인 값을 필드(field)라고 한다. 또한 모든 자동차는 운행, 세차 등의 행위를 할 수 있는데, 이렇게 공통적으로 갖는 동작 행위를 메소드(method)라고 한다. 이러한 자동차라는 클래스로 차종, 자동차번호 등의 각각의 필드값을 갖는 개체가 바로 객체가 된다. Kotlin은.. 2022. 12. 2.