📕문제 유섭이는 무척이나 게으르다. 오늘도 할 일을 모두 미뤄둔 채 열심히 롤을 하던 유섭이는 오늘까지 문제를 내야 한다는 사실을 깨달았다. 그러나 게임은 시작되었고 지는 걸 무척이나 싫어하는 유섭이는 어쩔 수 없이 백도어를 해 게임을 최대한 빠르게 끝내기로 결심하였다. 최대한 빨리 게임을 끝내고 문제를 출제해야 하기 때문에 유섭이는 최대한 빨리 넥서스가 있는 곳으로 달려가려고 한다. 유섭이의 챔피언은 총 N개의 분기점에 위치할 수 있다. 0번째 분기점은 현재 유섭이의 챔피언이 있는 곳을, N-1 번째 분기점은 상대편 넥서스를 의미하며 나머지 1, 2,...,N-2번째 분기점은 중간 거점들이다. 그러나 유섭이의 챔피언이 모든 분기점을 지나칠 수 있는 것은 아니다. 백도어의 핵심은 안 들키고 살금살금 가는..
문제 N개의 도시가 있다. 그리고 한 도시에서 출발하여 다른 도시에 도착하는 M개의 버스가 있다. 우리는 A번째 도시에서 B번째 도시까지 가는데 드는 버스 비용을 최소화시키려고 한다. A번째 도시에서 B번째 도시까지 가는데 드는 최소비용을 출력하여라. 도시의 번호는 1부터 N까지이다. 입력 첫째 줄에 도시의 개수 N(1 ≤ N ≤ 1,000)이 주어지고 둘째 줄에는 버스의 개수 M(1 ≤ M ≤ 100,000)이 주어진다. 그리고 셋째 줄부터 M+2줄까지 다음과 같은 버스의 정보가 주어진다. 먼저 처음에는 그 버스의 출발 도시의 번호가 주어진다. 그리고 그다음에는 도착지의 도시 번호가 주어지고 또 그 버스 비용이 주어진다. 버스 비용은 0보다 크거나 같고, 100,000보다 작은 정수이다. 그리고 M+3..
다익스트라 알고리즘은 그래프에서 한 정점(노드)에서 다른 정점까지의 최단 경로를 구하는 알고리즘이다. [여기서 그래프에는 음의 가중치가 없어야 한다!] 왜냐하면 다익스트라 알고리즘은 탐욕 법(Greedy)을 기반의 알고리즘인데 최소 거리에 최소 거리를 계속 붙여가면서 최종적으로 최적의 경로를 찾기 때문에 음수 가중치를 고려하지 못하는 것이 현실이다. 하지만 무조건적으로 다익스트라 알고리즘이 음수 가중치가 포함된 그래프에서 최단경로를 못 구하는 것은 아니다. 구할 수도 있고, 못 구할 수도 있다. 자세한 것은 밑에 주소에 적혀 있고, 나도 이 블로그를 보면서 참고했다 https://kangworld.tistory.com/76https://kangworld.tistory.com/76 [Algorithm] 다..
자바와 마찬가지로 코틀린도 가변 인자를 지원한다. 가변 인자를 사용하면 함수를 호출할 때 인자의 개수를 자유롭게 지정할 수 있다. 사용하려면 파리 미터 앞에 vararg를 붙이면 된다. fun printSort(vararg items:Int){ items.sort() println(items.contentToString()) } fun main(){ printSort(1) // [1] printSort(1,4,3,2) // [1,2,3,4] } 위에서 보듯이 vararg를 items 앞에 붙여주니 인자의 개수를 마음대로 사용하고 적절한 배열 타입으로 사용할 수 있다. 💡스프레드(spread)연산자인 *를 사용하면 배열을 가변 인자 대신 넘길 수 있다. fun printSort(vararg items:In..
📕문제 매일 아침, 세준이는 학교에 가기 위해서 차를 타고 D킬로미터 길이의 고속도로를 지난다. 이 고속도로는 심각하게 커브가 많아서 정말 운전하기도 힘들다. 어느 날, 세준이는 이 고속도로에 지름길이 존재한다는 것을 알게 되었다. 모든 지름길은 일방통행이고, 고속도로를 역주행할 수는 없다. 세준이가 운전해야 하는 거리의 최솟값을 출력하시오. 📕입력 첫째 줄에 지름길의 개수 N과 고속도로의 길이 D가 주어진다. N은 12 이하인 양의 정수이고, D는 10,000보다 작거나 같은 자연수이다. 다음 N개의 줄에 지름길의 시작 위치, 도착 위치, 지름길의 길이가 주어진다. 모든 위치와 길이는 10,000보다 작거나 같은 음이 아닌 정수이다. 지름길의 시작 위치는 도착 위치보다 작다. 📕출력 세준이가 운전해야 ..
🔎오버 로딩 이름이 같은 함수를 여러 개 작성할 수 있는 기능 🛑주의할 점 컴파일러가 어떤 함수를 호출해야 할지 구분할 수 있도록 오버 로딩한 함수의 파라미터 타입을 구분해줘야 한다. ⭕예를 들어 다음 두 함수는 올바른 오버 로딩을 구성한다. fun readInt()= readLine()!!.toInt() fun readInt(radix : Int)= readLine()!!.toInt(radix) ❌다음 두 함수는 컴파일 오류가 발생한다. 왜일까? 두 함수는 반환 값만 다르고 파라미터의 타입은 같기 때문에 컴파일 오류가 발생하는 것이다! 이렇게 컴파일러는 다음과 같은 오버 로딩 해소 규칙을 따른다. 파라미터의 개수와 타입을 기준으로 호출할 수 있는 모든 함수를 찾는다. 덜 구체적인 함수를 제외시킨다. 규..
📕문제 n(2 ≤ n ≤ 100) 개의 도시가 있다. 그리고 한 도시에서 출발하여 다른 도시에 도착하는 m(1 ≤ m ≤ 100,000) 개의 버스가 있다. 각 버스는 한 번 사용할 때 필요한 비용이 있다. 모든 도시의 쌍 (A, B)에 대해서 도시 A에서 B로 가는데 필요한 비용의 최솟값을 구하는 프로그램을 작성하시오. 📕입력 첫째 줄에 도시의 개수 n이 주어지고 둘째 줄에는 버스의 개수 m이 주어진다. 그리고 셋째 줄부터 m+2줄까지 다음과 같은 버스의 정보가 주어진다. 먼저 처음에는 그 버스의 출발 도시의 번호가 주어진다. 버스의 정보는 버스의 시작 도시 a, 도착 도시 b, 한 번 타는데 필요한 비용 c로 이루어져 있다. 시작 도시와 도착 도시가 같은 경우는 없다. 비용은 100,000보다 작거나..
🔎함수 : 입력(파라미터)을 받아서 자신을 호출한 코드 쪽에 출력 값을 반환할 수 있는 재사용 가능한 코드 블록이다. 아래 사진은 원의 넓이를 구하는 함수이다. 위 사진을 세세하게 뜯어본다면 fun은 함수라는 뜻이고 뒤에 정의가 뒤따라온다. circleArea는 함수의 이름이다. 괄호로 둘러싸여 있는 (radius : Double)은 파라미터 목록이고, 파라미터의 타입을 명시해주면서, 함수를 호출할 때 넘길 수 있는 데이터를 컴파일러에게 알려준다. Double은 반환타입이다. 함수 본문은 {}로 둘러싸여 있는 블록이며 함수의 구현을 기술한다. 🛑함수가 파라미터를 받지 않는다고 해도 파라미터를 감싸는 괄호는 있어야 한다. 코틀린 함수의 파라미터는 무조건 불변이다. 즉 함수 내부에서 변경하지 못한다. 따라서..
이번 글에서는 코틀린에서의 배열에 대해 알아볼 것이다. 배열구조를 구현하는 가장 일반적인 코틀린 타입은 Array 이다. val a= emptyArray() //Array원소 0개 val b = arrayOf("Hello", "world") //Array 원소 2개 val c= arrayOf(1,4,9)//Array 원소 3개 호출할 때 원소의 타입을 따로 지정하지 않아도 타입 추론 덕분에 함수 호출의 인자 타입을 알아낼 수 있다. 인덱스를 사용해서 배열의 원소를 만들어내는 방법도 있다. val size= readLine()!!.toInt() //null값이 입력된다면 null을 반환해줘라. val s= Array(size){(it+1) *(it+1)} //각 배열의 인덱스에 (인덱스+1)^2값이 들어가..