굥굥 DEV

    [백준][코틀린] 2580 스도쿠

    문제 내용 문제 스도쿠는 18세기 스위스 수학자가 만든 '라틴 사각형'이랑 퍼즐에서 유래한 것으로 현재 많은 인기를 누리고 있다. 이 게임은 아래 그림과 같이 가로, 세로 각각 9개씩 총 81개의 작은 칸으로 이루어진 정사각형 판 위에서 이뤄지는데, 게임 시작 전 일부 칸에는 1부터 9까지의 숫자 중 하나가 쓰여 있다. 나머지 빈 칸을 채우는 방식은 다음과 같다. 각각의 가로줄과 세로줄에는 1부터 9까지의 숫자가 한 번씩만 나타나야 한다. 굵은 선으로 구분되어 있는 3x3 정사각형 안에도 1부터 9까지의 숫자가 한 번씩만 나타나야 한다. 위의 예의 경우, 첫째 줄에는 1을 제외한 나머지 2부터 9까지의 숫자들이 이미 나타나 있으므로 첫째 줄 빈칸에는 1이 들어가야 한다. 또한 위쪽 가운데 위치한 3x3 ..

    인터럽트(Interrupt)

    인터럽트(Interrupt)

    정의 프로그램을 실행하는 도중에 예기치 않은 상황이 발생할 경우 현재 실행중인 작업을 즉시 중단하고, 발생된 상황에 대한 우선 처리가 필요하다고 CPU에 알리는 것 지금 수행 중인 일보다 더 중요한 일(입출력, 우선 순위 연산 등)이 발생하면 그 일을 먼저 처리하고 나서 하던 일을 계속해야한다. 주 프로그램이 실행되다가 인터럽트가 발생했다. 현재 수행 중인 프로그램을 멈추고, 상태 레지스터와 PC 등을 스택에 저장한 뒤에 인터럽트 서비스 루틴으로 간다. 인터럽트 처리가 완료 되었다면, 마지막에 실행되던 주소로 점프하고, 주 프로그램을 실행한다. 이때, 인터럽트 기능이 없었다면, 컨트롤러는 특정한 어떤 일을 할 시기를 알기 위해 계속 체크를 해주어야 될 것이다. 이러한 방식을 폴링이라고한다. 폴링 대상을 ..

    [공식문서를 읽자] Types - Type checks and casts

    Type checks and casts | Kotlin kotlinlang.org is and !is operators 객체가 주어진 Type을 준수하는지 여부를 식별하는 런타임에 타입 체크를 수행하려면 is 연산자 또는 부정 형식인 !is 를 사용하라. if (obj is String) { print(obj.length) } if (obj !is String) { // == !(obj is String) print("Not a String") } else { print(obj.length) } Smart casts 대부분의 경우, 코틀린 컴파일러는 변경 불가능한 값에 대해 is-check 및 명시적 캐스트를 추적하고 필요할 때 자동으로 (안전한) 형변환을 삽입하기 때문에 명시적 캐스트 연산자를 사용할 ..

    [백준][코틀린] 2407 조합

    문제 내용 문제 \(_nC_m\) 을 출력한다. 입력 n과 m이 주어진다. (5 ≤ n ≤ 100, 5 ≤ m ≤ 100, m ≤ n) 출력 \(_nC_m\) 을 출력한다. 예제 입력 예제 출력 100 6 1192052400 문제 풀이 ̆̈ 코드 import java.io.BufferedReader import java.io.InputStreamReader import java.math.BigInteger fun main() { val (n, m) = BufferedReader(InputStreamReader(System.`in`)).readLine().split(" ").map { it.toInt() } var a = BigInteger.ONE; var b = BigInteger.ONE for (i i..

    [백준][코틀린] 15657 N과 M (8)

    문제 내용 문제 N개의 자연수와 자연수 M이 주어졌을 때, 아래 조건을 만족하는 길이가 M인 수열을 모두 구하는 프로그램을 작성하시오. N개의 자연수는 모두 다른 수이다. N개의 자연수 중에서 M개를 고른 수열 같은 수를 여러 번 골라도 된다. 고른 수열은 비내림차순이어야 한다. 길이가 K인 수열 A가 \(A_1\) ≤ \(A_2\) ≤ … ≤ \(A_{K-1}\) ≤ \(A_K\)를 만족하면, 비내림차순이라고 한다. 입력 첫째 줄에 N과 M이 주어진다. (1 ≤ M ≤ N ≤ 8) 둘째 줄에 N개의 수가 주어진다. 입력으로 주어지는 수는 10,000보다 작거나 같은 자연수이다. 출력 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 ..

    [백준][코틀린] 15654 N과 M (5)

    문제 내용 문제 N개의 자연수와 자연수 M이 주어졌을 때, 아래 조건을 만족하는 길이가 M인 수열을 모두 구하는 프로그램을 작성하시오. N개의 자연수는 모두 다른 수이다. N개의 자연수 중에서 M개를 고른 수열 입력 첫째 줄에 N과 M이 주어진다. (1 ≤ M ≤ N ≤ 8) 둘째 줄에 N개의 수가 주어진다. 입력으로 주어지는 수는 10,000보다 작거나 같은 자연수이다. 출력 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해야 한다. 예제 입력 예제 출력 3 1 4 5 2 2 4 5 4 2 9 8 7 1 1 7 1 8 1 9 7 1 7 8 7 9 8 1 8 7 8 9..

    [백준][코틀린] 9663 N-Queen

    [백준][코틀린] 9663 N-Queen

    문제 내용 문제 N-Queen 문제는 크기가 N × N인 체스판 위에 퀸 N개를 서로 공격할 수 없게 놓는 문제이다. N이 주어졌을 때, 퀸을 놓는 방법의 수를 구하는 프로그램을 작성하시오. 입력 첫째 줄에 N이 주어진다. (1 ≤ N

    [백준][코틀린] 14889 스타트와 링크

    [백준][코틀린] 14889 스타트와 링크

    문제 내용 문제 오늘은 스타트링크에 다니는 사람들이 모여서 축구를 해보려고 한다. 축구는 평일 오후에 하고 의무 참석도 아니다. 축구를 하기 위해 모인 사람은 총 N명이고 신기하게도 N은 짝수이다. 이제 N/2명으로 이루어진 스타트 팀과 링크 팀으로 사람들을 나눠야 한다. BOJ를 운영하는 회사 답게 사람에게 번호를 1부터 N까지로 배정했고, 아래와 같은 능력치를 조사했다. 능력치 Sij는 i번 사람과 j번 사람이 같은 팀에 속했을 때, 팀에 더해지는 능력치이다. 팀의 능력치는 팀에 속한 모든 쌍의 능력치 Sij의 합이다. Sij는 Sji와 다를 수도 있으며, i번 사람과 j번 사람이 같은 팀에 속했을 때, 팀에 더해지는 능력치는 Sij와 Sji이다. N=4이고, S가 아래와 같은 경우를 살펴보자. 예를..

    [백준][코틀린] 14888 연산자 끼워넣기

    [백준][코틀린] 14888 연산자 끼워넣기

    문제 내용 문제 N개의 수로 이루어진 수열 A1, A2, ..., AN이 주어진다. 또, 수와 수 사이에 끼워넣을 수 있는 N-1개의 연산자가 주어진다. 연산자는 덧셈(+), 뺄셈(-), 곱셈(×), 나눗셈(÷)으로만 이루어져 있다. 우리는 수와 수 사이에 연산자를 하나씩 넣어서, 수식을 하나 만들 수 있다. 이때, 주어진 수의 순서를 바꾸면 안 된다. 예를 들어, 6개의 수로 이루어진 수열이 1, 2, 3, 4, 5, 6이고, 주어진 연산자가 덧셈(+) 2개, 뺄셈(-) 1개, 곱셈(×) 1개, 나눗셈(÷) 1개인 경우에는 총 60가지의 식을 만들 수 있다. 예를 들어, 아래와 같은 식을 만들 수 있다. 1+2+3-4×5÷6 1÷2+3+4-5×6 1+2÷3×4-5+6 1÷2×3-4+5+6 식의 계산은 ..

    [공식문서를 읽자] Types - Basic types

    Basic types | Kotlin kotlinlang.org 코틀린에서 모든 것은 우리가 어떤 변수에 대해 멤버 함수와 Properties를 호출 할 수 있다는 점에서 객체이다. 일부 유형은 특수한 내부 표현을 가질 수 있다. 예를 들어 숫자, 문자, Boolean은 런타임 시에 primitive value로 표현될 수 있지만, 사용자가 보기엔 ordinary class(일반 클래스)로 보인다. Numbers Integer types 코틀린에서는 숫자를 표현하기 위해 여러개의 내장 타입을 제공한다. Type Size(bits) Min value Max value Byte 8 -128 127 Short 16 -32768 32767 Int 32 \(-2^{31}\) \(2^{31}-1\) Long 64 ..

    [백준][코틀린] 15652 N과 M (4)

    문제 내용 문제 자연수 N과 M이 주어졌을 때, 아래 조건을 만족하는 길이가 M인 수열을 모두 구하는 프로그램을 작성하시오. 1부터 N까지 자연수 중에서 M개를 고른 수열 같은 수를 여러 번 골라도 된다. 고른 수열은 비내림차순이어야 한다. 길이가 K인 수열 A가 \(A_1\) ≤ \(A_2\) ≤ … ≤ \(A_{K-1}\) ≤ \(A_K\)를 만족하면, 비내림차순이라고 한다. 입력 첫째 줄에 자연수 N과 M이 주어진다. (1 ≤ M ≤ N ≤ 8) 출력 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해야 한다. 예제 입력 예제 출력 3 1 1 2 3 4 2 1 1 ..

    [백준][코틀린] 15651 N과 M (3)

    문제 내용 문제 자연수 N과 M이 주어졌을 때, 아래 조건을 만족하는 길이가 M인 수열을 모두 구하는 프로그램을 작성하시오. 1부터 N까지 자연수 중에서 M개를 고른 수열 같은 수를 여러 번 골라도 된다. 입력 첫째 줄에 자연수 N과 M이 주어진다. (1 ≤ M ≤ N ≤ 7) 출력 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해야 한다.한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 예제 입력 예제 출력 3 1 1 2 3 4 2 1 1 1 2 1 3 1 4 2 1 2 2 2 3 2 4 3 1 3 2 3 3 3 4 4 1 4 2 4 3 4 4 3 3 1 1 ..

    [백준][코틀린] 15650 N과 M (2)

    문제 내용 문제 자연수 N과 M이 주어졌을 때, 아래 조건을 만족하는 길이가 M인 수열을 모두 구하는 프로그램을 작성하시오.1 1부터 N까지 자연수 중에서 중복 없이 M개를 고른 수열 고른 수열은 오름차순이어야 한다. 입력 첫째 줄에 자연수 N과 M이 주어진다. (1 ≤ M ≤ N ≤ 8) 출력 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해야 한다. 예제 입력 예제 출력 3 1 1 2 3 4 2 1 2 1 3 1 4 2 3 2 4 3 4 4 4 1 2 3 4 문제 풀이 조합을 구하는 문제이다! ̆̈ 코드 private lateinit var array: IntArr..

    [백준][코틀린] 15649 N과 M (1)

    문제 내용 문제 자연수 N과 M이 주어졌을 때, 아래 조건을 만족하는 길이가 M인 수열을 모두 구하는 프로그램을 작성하시오. 1부터 N까지 자연수 중에서 중복 없이 M개를 고른 수열 입력 첫째 줄에 자연수 N과 M이 주어진다. (1 ≤ M ≤ N ≤ 8) 출력 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해야 한다. 예제 입력 예제 출력 3 1 1 2 3 4 2 1 2 1 3 1 4 2 1 2 3 2 4 3 1 3 2 3 4 4 1 4 2 4 3 4 4 1 2 3 4 1 2 4 3 1 3 2 4 1 3 4 2 1 4 2 3 1 4 3 2 2 1 3 4 2 1 4 3 ..

    [코틀린] 조합, 순열 구현하기

    백트래킹을 공부하면서, 백트래킹 대표 입문 문제인 N과 M을 풀어보았다. Python으로 조합과 순열을 사용할 때가 나오면, 이미 구현된 라이브러리를 사용했었다. 그럼 Kotlin에서는 조합, 순열을 사용하려면 어떻게 해야될까 생각을 하였고, 미리 템플릿(?)을 만들어두기로 했다. 평소에 수학 문제를 풀때 처럼 array와 n, r 값만 입력하면, List 형태로 결과가 나오고 이를 가공해서 편한대로 사용할 수 있다. 순열 \(_nP_r\) private fun permutation(array: Array, n: Int, r: Int): List { val nArray = array.sliceArray(0 until r) //reified type을 쓰지 않고, Array를 사용하기 위해 작성 val v..