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

Algorithm/BOJ115

[Kotlin] 백준 23629 : 이 얼마나 끔찍하고 무시무시한 수식이니 문제 링크 operator.add(it) else -> numbers.add( try { it.toLong() } catch (e: NumberFormatException) { println("Madness!") return@with } ) } } } if (numbers.size != operator.size) { println("Madness!") return@with } var result = numbers.poll() while (operator.isNotEmpty()) { when (operator.poll()) { "+" -> result += numbers.poll() "-" -> result -= numbers.poll() "x" -> result *= numbers.poll() "/" -.. 2023. 1. 14.
[Kotlin] 백준 22234 : 가희와 은행 문제 링크 22234번: 가희와 은행 가희는 창구가 하나인 은행을 운영하고 있습니다. 가희의 은행이 영업을 시작했을 때, 대기 줄에는 손님이 N명 있습니다. [그림 1] 카운터 직원과 N명의 손님 x번 손님에 대한 정보는 x번 손님의 www.acmicpc.net 문제 해설 큐와 정렬을 적절하게 사용해서 풀 수 있는 문제이다. 문제 해결 과정은 다음과 같다. 은행이 영업을 시작했을 때 대기 줄에 있는 \(N\)명의 손님을 순서대로 큐(이하 대기 큐)에 삽입한다. 은행이 영업중일 때 새로 들어온 손님은 별도의 리스트(이하 신규 손님)에 \(C_x\)를 기준으로 오름차순 정렬하여 삽입한다. 이 포스트에서는 손님 클래스에 Comparable을 구현한 후 우선순위 큐를 사용했다. 다음 순서에 따라 \(W\)초 까.. 2023. 1. 13.
[Kotlin] 백준 9080 : PC방 요금 문제 링크 9080번: PC방 요금 현성이는 요즘 LINEAR 2라는 온라인 게임에 빠져있다. PC방에 가서 게임을 즐기는데, 자주 가는 PC방의 요금체계는 다음과 같다. 일반 요금으로 시간당 1000원 씩을 받으며, 야간 정액을 끊으면 5000원 www.acmicpc.net 문제 해설 분기에 따라 요금을 계산해야한다. 먼저 계산을 수월하게 하기 위해 시간을 분으로 통합한다. 그리고 분기에 따라 다음의 계산을 수행한다. 현재 시간이 22시~3시면서 남은 플레이 시간이 5시간 이상인 경우 : 야간 정액이 이득이기 때문에 8시가 될 때까지 남은 플레이 시간을 모두 소진하고 요금에 5천원을 추가한다. 그 외의 경우 3시~8시인 경우 : 남은 플레이 시간이 5시간 이상이더라도 야간 정액을 이용할 수 있는 시간이.. 2023. 1. 12.
[Kotlin] 백준 21773 : 가희와 프로세스 1 문제 링크 21773번: 가희와 프로세스 1 1초일 때 부터 4초일 때 상황을 그림으로 나타내면 아래와 같습니다. 아래 그림에서 주황색은 특정 시점에 스케쥴러가 선택한 프로세스를 의미합니다. www.acmicpc.net 문제 해설 우선순위 큐와 Comparable 인터페이스를 구현한 클래스를 사용하여 답을 찾아야 한다. 문제를 해결하는 과정은 다음과 같다. 각 프로세스의 우선순위가 같다면 id가 낮은 순으로, 다르다면 우선순위를 높은 순으로 정렬하도록 Comparable 인터페이스를 구현한 클래스를 선언한다. 우선순위 큐에 입력을 토대로 생성한 프로세스 객체를 모두 삽입한다. 우선순위 큐의 Root 요소를 꺼내어 다음 연산을 수행한다. null이라면(= 스케줄러가 비어있다면) 반복문을 종료한다. 꺼낸 프.. 2023. 1. 10.
[Kotlin] 백준 2757 : 엑셀 문제 링크 2757번: 엑셀 입력은 여러 줄이며, RnCm형태이다. n은 행 번호 (1 2023. 1. 9.
[Kotlin] 백준 25497 : 기술 연계마스터 임스 문제 링크 25497번: 기술 연계마스터 임스 $1$, $2$, $S$ - $K$, $2$로 스킬을 성공적으로 총 4번 사용했다. www.acmicpc.net 문제 해설 이전에 많이 나왔던 괄호 짝 맞추기와 비슷하게 스택을 활용하는 문제이다. 연계 기술 LR과 SK의 짝을 맞춰서 기술 성공 횟수를 카운트해야 하는데, 문제에 연계 기술을 사용할 때 사전 기술과 본 기술 사이에는 다른 기술을 사용해도 연계가 정상적으로 이루어진다는 언급이 있다. 즉, LSRK이나 SLKR 등과 같이 L, R, S, K가 섞여있어도 상관없다는 것이다. 이를 구현하기 위해 LR의 짝을 맞출 스택과 SK의 짝을 맞출 스택, 총 2개의 스택을 선언하여 문제를 해결한다. 연계 기술은 사전 기술과 본 기술이 모두 성공해야 1회로 카운트.. 2023. 1. 6.
[Kotlin] 백준 17952 : 과제는 끝나지 않아! 문제 링크 17952번: 과제는 끝나지 않아! 성애는 이번 학기에 전공을 정말 많이 듣는다. 이로 인해 거의 매일을 과제를 하면서 보내고 있다. 그런데도 과제가 줄어들 기미가 보이지 않는데, 바로 분단위로 과제가 추가되고 있기 때문이 www.acmicpc.net 문제 해설 문제의 규칙 1, 2번에 의해 스택을 사용하면 된다는 것을 알 수 있다. 과제의 점수와 남은 시간을 나타내는 객체를 담는 스택을 선언한 후 입력에 따라 스택에서 연산을 진행한다. 0이 입력되어 과제가 주어지지 않았다면 스택의 가장 윗부분 과제의 남은 시간을 1 줄인다. 1이 입력되어 과제가 주어졌다면 스택에 새로운 과제를 추가한다. 이 때, 과제를 받자마자 바로 시작하기 때문에 과제의 남은 시간에서 1을 뺀 값을 추가해야 한다. 각 연.. 2023. 1. 5.
[Kotlin] 백준 18917 : 수열과 쿼리 38 문제 링크 18917번: 수열과 쿼리 38 3번째 쿼리가 끝난 이후 배열의 상태는 [0, 3, 1, 4]이다. 6번째 쿼리가 끝난 이후 배열의 상태는 [0, 3, 1, 4, 1]이다. 10번째 쿼리가 끝난 이후 배열의 상태는 [0, 3, 1]이다. www.acmicpc.net 문제 해설 수열, 배열이라는 말이 있어서 실제로 리스트를 만들어서 구현하려고 할 수 있는데 함정이 있다. 쿼리의 개수가 최대 50만개이기 떄문에 실제 리스트에 25만개의 요소를 추가하고, 합이나 XOR 결과를 25만번 출력하게 되면 \(250,001\times250,000=62,500,250,000\)가 되어 약 625초의 시간이 걸리게 된다. 따라서, 실제 리스트를 구현하지 않고 답을 구해야 한다. 문제에서 요구하는 출력은 모든 .. 2023. 1. 3.