큐5 [Kotlin] 백준 23294 : 웹 브라우저 1 문제 링크 23294번: 웹 브라우저 1 첫째 줄에 접속할 수 있는 웹페이지의 종류의 수 N, 사용자가 수행하는 작업의 개수 Q 와 최대 캐시 용량 C 이 순서대로 주어진다.(1 ≤ N, Q ≤ 2,000, 1 ≤ C ≤ 200,000) 둘째 줄에는 N개의 정수 CAPi www.acmicpc.net 문제 해설 [Kotlin] 백준 23300 : 웹 브라우저 2와 유사한 문제지만 캐시 용량의 제한이 추가되어 있는 문제이다. 캐시 용량을 다루는 것을 제외하면 기본적인 풀이는 동일하다. 각 페이지의 캐시 공간은 배열에 저장하여 사용했다. 뒤로 가기 공간과 앞으로 가기 공간을 각각 덱으로 구현하고 B 또는 F를 수행할 때마다 저장된 페이지와 현재 페이지를 옮기면 된다. 이 두 경우에는 이미 캐시 공간에 저장된 .. 2023. 4. 19. [Kotlin] 백준 23300 : 웹 브라우저 2 문제 링크 23300번: 웹 브라우저 2 첫째 줄에 접속할 수 있는 웹페이지의 종류의 수 N, 사용자가 수행하는 작업의 개수 Q 가 각각 주어진다.(1 ≤ N, Q ≤ 2,000) 둘째 줄부터는 Q개의 작업이 주어지며, 각 작업이 의미하는 바는 다음 www.acmicpc.net 문제 해설 뒤로가기 목록을 저장할 스택과 앞으로가기 목록을 저장할 큐를 각각 만들면 손쉽게 해결할 수 있다. 본 코드에서는 덱을 사용했지만 크게 상관은 없다고 생각한다. 압축 기능은 뒤로가기 목록의 2번째 페이지부터 마지막 페이지까지 이동하면서 이전 페이지와 같으면 제거하는 식으로 구현했다. Code import java.util.StringTokenizer fun main() = with(System.`in`.bufferedRe.. 2023. 1. 26. [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] 백준 1966 : 프린터 큐 문제 링크 1966번: 프린터 큐 여러분도 알다시피 여러분의 프린터 기기는 여러분이 인쇄하고자 하는 문서를 인쇄 명령을 받은 ‘순서대로’, 즉 먼저 요청된 것을 먼저 인쇄한다. 여러 개의 문서가 쌓인다면 Queue 자료구조에 www.acmicpc.net 문제 해설 큐(Queue)를 이용하면 쉽게 풀 수 있다. 우선 문서가 인쇄 대기열에 등록된 순서와 중요도를 묶은 배열을 모두 큐에 삽입한다. 그 후 M번째 문서가 인쇄될 때까지 아래 과정을 반복해서 수행한다.(코드의 14~25번째 줄) 현재 인쇄 대기열의 0번째 문서의 중요도가 가장 높은지 확인한다. 가장 높을 경우 해당 문서를 인쇄하고 원래 순서가 M이면 반복문을 종료한다. 가장 높은 경우가 아니면 해당 문서를 빼서 다시 큐의 맨 뒤에 삽입한다. 이 과.. 2022. 11. 30. 이전 1 다음