자바의 switch가 있다면 코틀린에는 when이 있다. 이번 글에서는 when에 대해서 작성해볼 예정이다. if문은 두 가지 가능성 중 하나를 선택하게 해 준다는 것을 우리는 알고 있다. 그리고 여러 개의 if문을 사용해서 순차적으로 검사하면서 여러 개 중 하나를 선택할 수 있다. fun hexDigit(n:Int):char{ if(n in 0..9) return '0'+n else if(n in 10..15) return 'A'+n-10 else return '?' } 하지만 여러 대안중 하나를 선택할 수 있는 기능이 있다면 여러 개의 if 문을 사용하는 것보단 훨씬 간결하게 코드를 짤 수 있을것이다. 이러한 기능을 제공해 주는 것이 바로 when이다. fun hexDigit(n:Int) char{ ..
전체 글
안녕하세요 💻코틀린에서는 자바의 if, switch와 비슷한 if, when이 조건문을 표현한다. 📕if문 if문을 사용하면 불(boolean) 식의 결과에 따라 두 가지 대안 중 하나를 선택할 수 있다. 코틀린 if는 자바 if 문과 비슷한 문법을 제공한다. fun max(a:Int, b:Int):Int{ if(a>b) return a else return b } 조건이 참일 때 첫 번째 문장을 실행하고, 조건이 거짓일 때 else 문을 실행한다. 만약 조건이 거짓일 때 아무 일도 하지 않아도 된다면 else문을 생략해도 된다. ⚡조건은 항상 Boolean타입의 식이어야 한다! 💡자바의 if와 코틀린의 if의 차이 코틀린은 자바와 다르게 if를 식으로 사용할 수 있다는 것이다. if 식을 사용하면 max 함수를 더..
C++로 백준을 풀 때 항상 시간 초과가 난다면 나는 알고리즘의 수정보다는 위의 제목과 같은 구문을 작성해서 기존 코드에 추가했다. ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); 근데 이러한 코드가 무슨 의미인지 모르고 사용하고 있으니 궁금하기도 하고, 그래서 구글에서 검색을 하고 정리할 예정이다. 🔎ios_base::sync_with_stdio(false); ios_base::sync_with_stdio 구문은 c의 stdio와 cpp의 iostream을 동기화시켜주는 역할을 하는데 이때 iostream과 stdio의 버퍼를 모드 사용하기 때문에 딜레이가 발생한다. 따라서 ios_base::sync_with_stdio(fa..
📕문제 방향 그래프가 주어지면 주어진 시작점에서 다른 모든 정점으로의 최단 경로를 구하는 프로그램을 작성하시오. 단, 모든 간선의 가중치는 10 이하의 자연수이다. 📕입력 첫째 줄에 정점의 개수 V와 간선의 개수 E가 주어진다. (1 ≤ V ≤ 20,000, 1 ≤ E ≤ 300,000) 모든 정점에는 1부터 V까지 번호가 매겨져 있다고 가정한다. 둘째 줄에는 시작 정점의 번호 K(1 ≤ K ≤ V)가 주어진다. 셋째 줄부터 E개의 줄에 걸쳐 각 간선을 나타내는 세 개의 정수 (u, v, w)가 순서대로 주어진다. 이는 u에서 v로 가는 가중치 w인 간선이 존재한다는 뜻이다. u와 v는 서로 다르며 w는 10 이하의 자연수이다. 서로 다른 두 정점 사이에 여러 개의 간선이 존재할 수도 있음에 유의한다. ..
📕문제 유섭이는 무척이나 게으르다. 오늘도 할 일을 모두 미뤄둔 채 열심히 롤을 하던 유섭이는 오늘까지 문제를 내야 한다는 사실을 깨달았다. 그러나 게임은 시작되었고 지는 걸 무척이나 싫어하는 유섭이는 어쩔 수 없이 백도어를 해 게임을 최대한 빠르게 끝내기로 결심하였다. 최대한 빨리 게임을 끝내고 문제를 출제해야 하기 때문에 유섭이는 최대한 빨리 넥서스가 있는 곳으로 달려가려고 한다. 유섭이의 챔피언은 총 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보다 작거나 같은 음이 아닌 정수이다. 지름길의 시작 위치는 도착 위치보다 작다. 📕출력 세준이가 운전해야 ..