굥굥 DEV
[백준][코틀린] 1931 회의실 배정
문제 내용 문제 한 개의 회의실이 있는데 이를 사용하고자 하는 N개의 회의에 대하여 회의실 사용표를 만들려고 한다. 각 회의 I에 대해 시작시간과 끝나는 시간이 주어져 있고, 각 회의가 겹치지 않게 하면서 회의실을 사용할 수 있는 회의의 최대 개수를 찾아보자. 단, 회의는 한번 시작하면 중간에 중단될 수 없으며 한 회의가 끝나는 것과 동시에 다음 회의가 시작될 수 있다. 회의의 시작시간과 끝나는 시간이 같을 수도 있다. 이 경우에는 시작하자마자 끝나는 것으로 생각하면 된다. 입력 첫째 줄에 회의의 수 N(1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N+1 줄까지 각 회의의 정보가 주어지는데 이것은 공백을 사이에 두고 회의의 시작시간과 끝나는 시간이 주어진다. 시작 시간과 끝나는 시간은 231-..
[공식문서를 읽자] Classes and objects - Classes
Classes | Kotlin kotlinlang.org 코틀린에서 클래스는 class 키워드로 선언된다. class Person { /*...*/ } 클래스 선언은 클래스 이름, 클래스 헤더(유형 매개변수, 기본 생성자 및 기타 사항 지정) 및 중괄호로 묶인 클래스 본문으로 구성된다. 헤더와 본문은 모두 선택사항이다. 클래스에 본문이 없으면 중괄호를 생략할 수 있다. class Empty Constructors 코틀린에서 클래스는 기본 생성자와 하나 이상의 보조 생성자를 가질 수 있다. 기본 생성자는 클래스 헤더의 일부로 선언되며, 클래스 이름 뒤에 타입 매개변수와 함께 작성한다. class Person constructor(firstName: String) { /*...*/ } 기본 생성자에 anno..
[백준][코틀린] 11047 동전 0
문제 내용 문제 준규가 가지고 있는 동전은 총 N종류이고, 각각의 동전을 매우 많이 가지고 있다. 동전을 적절히 사용해서 그 가치의 합을 K로 만들려고 한다. 이때 필요한 동전 개수의 최솟값을 구하는 프로그램을 작성하시오. 입력 첫째 줄에 N과 K가 주어진다. (1 ≤ N ≤ 10, 1 ≤ K ≤ 100,000,000) 둘째 줄부터 N개의 줄에 동전의 가치 Ai가 오름차순으로 주어진다. (1 ≤ Ai ≤ 1,000,000, A1 = 1, i ≥ 2인 경우에 Ai는 Ai-1의 배수) 출력 첫째 줄에 K원을 만드는데 필요한 동전 개수의 최솟값을 출력한다. 예제 입력 예제 출력 10 4200 1 5 10 50 100 500 1000 5000 10000 50000 6 10 4790 1 5 10 50 100 50..
[백준][코틀린] 1629 곱셈
문제 내용 문제 자연수 A를 B번 곱한 수를 알고 싶다. 단 구하려는 수가 매우 커질 수 있으므로 이를 C로 나눈 나머지를 구하는 프로그램을 작성하시오. 입력 첫째 줄에 A, B, C가 빈 칸을 사이에 두고 순서대로 주어진다. A, B, C는 모두 2,147,483,647 이하의 자연수이다. 출력 첫째 줄에 A를 B번 곱한 수를 C로 나눈 나머지를 출력한다. 예제 입력 예제 출력 10 11 12 4 문제 풀이 본 문제는, Kotlin의 BigInteger을 사용해도 풀리기는 한다. 하지만, 문제의 의도가 그걸 원한건 아닐테고.. 그렇게 푼다고 해서 실력이 는다 생각하지도 않아서, 문제의 의도대로 분할 정복을 이용해서 풀었다. 지수가 짝수일 땐, \(2^{10}\) = \(2^5\) * \(2^5\) 로 ..
[공식문서를 읽자] Packages and imports
Packages and imports | Kotlin kotlinlang.org 코틀린에서 소스파일은 패키지 선언으로 시작할 수 있다. package org.example fun printMessage() { /*...*/ } class Message { /*...*/ } // ... 이 패키지에는 소스 파일의 클래스, 함수 등 모든 내용이 포함되어 있다. 따라서 위의 예에서 printMessage()의 전체 이름은 org.example.printMessage이고 메시지의 전체 이름은 org.example.Message이다. 패키지가 지정되지 않은 경우 이러한 파일의 내용은 이름이 없는 default 패키지에 속한다. Default imports 기본적으로 모든 Kotlin 파일에 여러 패키지를 가져온다..
[공식문서를 읽자] Control Flow - Exceptions
Exceptions | Kotlin kotlinlang.org Exception classes 코틀린의 모든 예외 클래스는 Throwable 클래스를 상속받는다. 메시지, 스택 추적, 선택적 원인이 있다. 예외 객체를 throw하려면 throw 표현식을 사용한다. 더보기 예외 처리를 하기 위해서는 try-catch 표현식을 사용한다. try { // some code } catch (e: SomeException) { // handler } finally { // optional finally block } catch 블록은 0개 이상 존재할 수 있고, finally 블록은 생략할 수 있다. 단, 적어도 하나의 catch 또는 finally 블록이 필요하다. Try is an expression try는..
[백준][코틀린] 12605 단어순서 뒤집기
문제 내용 문제 스페이스로 띄어쓰기 된 단어들의 리스트가 주어질때, 단어들을 반대 순서로 뒤집어라. 각 라인은 w개의 영단어로 이루어져 있으며, 총 L개의 알파벳을 가진다. 각 행은 알파벳과 스페이스로만 이루어져 있다. 단어 사이에는 하나의 스페이스만 들어간다. 입력 첫 행은 N이며, 전체 케이스의 개수이다. N개의 케이스들이 이어지는데, 각 케이스는 스페이스로 띄어진 단어들이다. 스페이스는 라인의 처음과 끝에는 나타나지 않는다. N과 L은 다음 범위를 가진다. N = 5 1 ≤ L ≤ 25 출력 각 케이스에 대해서, 케이스 번호가 x일때 "Case #x: " 를 출력한 후 그 후에 이어서 단어들을 반대 순서로 출력한다. 예제 입력 예제 출력 3 this is a test foobar all your b..
[백준][코틀린] 8595 히든 넘버
문제 내용 문제 단어에 숫자가 숨어있다. 이 숫자를 히든 넘버라고 한다. 알파벳 대/소문자와 숫자로 이루어진 단어가 주어졌을 때, 모든 히든 넘버의 합을 구하는 프로그램을 작성하시오. 단어와 히든 넘버는 아래와 같은 성질을 갖는다. 연속된 숫자는 한 히든 넘버이다. 두 히든 넘버 사이에는 글자가 적어도 한 개 있다. 히든 넘버는 6자리를 넘지 않는다. 입력 첫째 줄에 단어의 길이 n (1 ≤ n ≤ 5,000,000)이 주어진다. 둘째 줄에는 단어가 주어진다. 단어는 알파벳 대/소문자와 숫자(0-9)로 이루어져 있다. 출력 입력으로 주어진 단어에 숨어있는 모든 히든 넘버의 합을 출력한다. 만약, 히든 넘버가 없는 경우에는 0을 출력한다. 예제 입력 예제 출력 14 ab13c9d07jeden 29 문제 풀..
[백준][코틀린] 11024 더하기 4
문제 내용 문제 수 N개가 주어졌을 때, N개의 합을 구하는 프로그램을 작성하시오. 입력 첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있으며, N(1 ≤ N ≤ 100)개의 수가 공백으로 구분되어서 주어진다. 입력으로 주어지는 수는 10,000보다 작거나 같은 자연수이다. 또, 0으로 시작하는 수는 주어지지 않는다. 출력 각 테스트 케이스마다 입력받은 수 N개의 합을 한 줄에 하나씩 입력받은 순서대로 출력한다. 예제 입력 예제 출력 2 1 2 3 4 5 5 4 5 4 2 3 1 2 15 26 문제 풀이 테스트 케이스 별로 들어온 리스트의 합을 구해주면 된다! ̆̈ 코드 fun main() { val br = System.`in`.bufferedReader() re..
[백준][코틀린] 11023 더하기 3
문제 내용 문제 수 N개가 주어졌을 때, N개의 합을 구하는 프로그램을 작성하시오. 입력 첫째 줄에 N(1 ≤ N ≤ 100)개의 수가 공백으로 구분되어서 주어진다. 입력으로 주어지는 수는 10,000보다 작거나 같은 자연수이다. 또, 0으로 시작하는 수는 주어지지 않는다. 출력 입력받은 수 N개의 합을 출력한다. 예제 입력 예제 출력 1 2 3 4 5 15 5 4 5 4 2 3 1 2 26 문제 풀이 들어온 리스트를 sumOf를 통해 계산해주기만 하면 된다~ ̆̈ 코드 fun main() = print(readLine()!!.split(" ").sumOf { it.toInt() }) 링크 11023번: 더하기 3 첫째 줄에 N(1 ≤ N ≤ 100)개의 수가 공백으로 구분되어서 주어진다. 입력으로 주어..
[백준][코틀린] 1182 부분수열의 합
문제 내용 문제 입력 받은 대로 출력하는 프로그램을 작성하시오. 입력 입력이 주어진다. 입력은 최대 100줄로 이루어져 있고, 알파벳 소문자, 대문자, 공백, 숫자로만 이루어져 있다. 각 줄은 100글자를 넘지 않으며, 빈 줄이 주어질 수도 있고, 각 줄의 앞 뒤에 공백이 있을 수도 있다. 출력 입력받은 그대로 출력한다. 예제 입력 예제 출력 Hello Baekjoon Online Judge Hello Baekjoon Online Judge 문제 풀이 이 문제는 총 몇줄이 주어진다 등 정보를 주지 않는다. 다른 것 처럼 공백이 들어왔을 때 종료를 할 수 있는거도 아니고, 문자열의 끝을 판단해서 거기까지만 출력해야되는 문제이다. Kotlin에서 readLine은 문자열이 들어오지 않았을 때 null을 반환..
[백준][코틀린] 1182 부분 수열의 합
문제 내용 문제 N개의 정수로 이루어진 수열이 있을 때, 크기가 양수인 부분수열 중에서 그 수열의 원소를 다 더한 값이 S가 되는 경우의 수를 구하는 프로그램을 작성하시오. 입력 첫째 줄에 정수의 개수를 나타내는 N과 정수 S가 주어진다. (1 ≤ N ≤ 20, |S| ≤ 1,000,000) 둘째 줄에 N개의 정수가 빈 칸을 사이에 두고 주어진다. 주어지는 정수의 절댓값은 100,000을 넘지 않는다. 출력 첫째 줄에 합이 S가 되는 부분수열의 개수를 출력한다. 예제 입력 예제 출력 5 0 -7 -3 -2 5 8 1 문제 풀이 재귀로 문제를 풀었다. 수열을 만든다 = 조합을 만든다 라고 생각해서 풀었다. 조합을 만드는데, 조합의 원소 갯수는 제한이 없는거지.. 그냥 순서가 없이 뽑는 경우를 만들고, 조합..
System Call
시스템 콜은 사용자나 응용 프로그램이 커널에서 제공하는 기능을 사용하기 위한 인터페이스 이다. 운영체제는 커널이 제공하는 서비스를 시스템 콜을 이용해 제한함으로써 컴퓨터 자원을 보호한다. 예) 프로세스 생성/종료, I/O 작업등이 있다. (fork, exec, exit, wait) Fork() 새로운 프로세스를 생성할 때 사용한다. Wait() child 프로세스가 종료될 때까지 기다리는 작업 (Wait를 통해서 child의 실행이 끝날 때까지 기다려준다. parent가 먼저 실행되더라도, wait()는 child가 끝나기 전에는 return하지 않기때문에 반드시 child가 먼저 실행된다. exec() 단순 fork는 동일한 프로세스의 내용을 여러번 동작할 때 사용한다. child에서는 parent와 ..
[공식문서를 읽자] Control flow - Returns and jumps
Returns and jumps | Kotlin kotlinlang.org 코틀린은 제어를 넘기는 세가지 구조적인 return과 jump 표현식이 있다. 이는 더 큰 표현식의 일부로 사용이 가능하다. Type은 Nothing 타입이다. return : return은 가장 가까운 블록의 함수 또는 익명 함수를 종료하고 반환된다. break : 가장 가까운 반복 루프를 중단시킨다. continue : 가장 가까운 반복 루프를 다음 반복으로 진행시킨다. val s = person.name ?: return Break and continue lables 코틀린의 모든 표현식은 레이블로 표현될 수 있다. break와 continue를 레이블과 함께 사용할 수 있다. 레이블과 함께 사용하는 경우 해당 레이블이 붙은..
[공식문서를 읽자] Control flow - Conditions and loops
Conditions and loops | Kotlin kotlinlang.org If expression 코틀린에서 if문은 표현식(값을 반환한다.)이다. 따라서, 일반 if가 역할을 잘 수행하기 때문에 삼항 연산자 (조건 ? then : else)가 없다. var max = a if (a b) { max = a } else { max = b } // As expression val max = if (a > b) a else b if 표현식의 분기는 블록이 될 수 있다. 이 경우에 블록의 값은 마지막 표현식이다. if 문을 값을 반환하는 식이나 변수에 값을 대입하기 위한 표현식으로 사용하는 경우, else 분기가 필수다...