📕문제 우리나라는 가족 혹은 친척들 사이의 관계를 촌수라는 단위로 표현하는 독특한 문화를 가지고 있다. 이러한 촌수는 다음과 같은 방식으로 계산된다. 기본적으로 부모와 자식 사이를 1촌으로 정의하고 이로부터 사람들 간의 촌수를 계산한다. 예를 들면 나와 아버지, 아버지와 할아버지는 각각 1촌으로 나와 할아버지는 2촌이 되고, 아버지 형제들과 할아버지는 1촌, 나와 아버지 형제들과는 3촌이 된다. 여러 사람들에 대한 부모 자식들 간의 관계가 주어졌을 때, 주어진 두 사람의 촌수를 계산하는 프로그램을 작성하시오. 📕입력 사람들은 1, 2, 3, …, n (1 ≤ n ≤ 100)의 연속된 번호로 각각 표시된다. 입력 파일의 첫째 줄에는 전체 사람의 수 n이 주어지고, 둘째 줄에는 촌수를 계산해야 하는 서로 다..
전체 글
안녕하세요 💻코딩 테스트에서 자주 사용되는 알고리즘이자 탐색 알고리즘에서 가장 유명한 방법들인 DFS와 BFS를 알아볼 것이다. 📕DFS란? DFS는 (Depth First Search)의 약칭으로 우리말로는 깊이 우선 탐색이라고 한다. 간단하게 말하면 트리나 그래프에서 한 루트로 최대한 깊숙하게 들어가면서 탐색한 뒤 다시 돌아가 다른 루트를 탐색하는 방법이다. 위의 그림처럼 1번에서 2번으로 간뒤 2번의 하위 트리를 끝까지 탐색한 후 되돌아가 다른 경로를 탐색한다. 대표적으로는 백트래킹[Backtracking]에 사용한다. 👍장점 현 견로상의 노드들만을 기억하면 되므로 저장 공간의 수요가 비교적 적다. 목표 노드가 깊은 단계에 있을수록, 그 노드가 좌측에 있을수록 BFS보다 해를 빨리 구할 수 있다. 👎단점 해가 ..
이번 글에서는 수, 문자, 불, 값 등을 표현하는 코틀린 타입을 소개할 것이다. 책을 읽어본 결과 정수타입과 bit타입은 내가 사용하는 C++과 크게 다르지 않았지만, 문자에 관해서는 확실히 코틀린이 편리한 기능이 많았다. 📕문자타입 char 새 줄 문자와 같은 특수 문자를 위해 코틀린은 이스케이프를 제공한다. \t : tab \b : 백스페이스 \n : 새줄 \r : 캐리지 리턴 \' : 작은따옴표, \" : 큰 따옴표 \\는 역 슬래쉬 \$ : 달러 표시 내부에서 char 값은 그냥 문자 코드일 뿐이지만, 코틀린은 char 자체를 수 타입으로 취급하지는 않는다. 하지만 유니코드 문자 집합 내에서의 몇 가지 산술 연산을 허용한다. 다음은 char로 할 수 있는 연산이다. +/- 연산자를 사용해 ..
1. 주석처리 힌줄짜리 주석 : //로 시작하여 줄이 끝나면 주석도 끝난다. 여러 줄 주석 : /*로 시작하고 */로 끝난다. KDoc 여러 줄 주석 : /**로 시작하고 */로 끝난다. 자바와 달리 코틀린에서는 여러 줄 주석을 내포시킬 수 있다. 2. 변수 정의하기 val timeInSeconds = 15 val 키워드 : 값을 뜻하는 value에서 유래했다. 변수 식별자 : 새 변수에 이름을 부여하고, 나중에 이를 가리킬 때 사용한다. 변수의 초깃값을 정의하는 식 : = 기호 뒤에 온다. 💡자바와 다른 점 변수 정의 뒤에 세미콜론(;)을 붙이지 않았다. 코틀린에서는 줄 끝에 새미 콜론을 생략해도 된다. 📕타입 추론 대부분의 경우 컴파일러가 코드의 문맥에서 타입을 도출해주는 언어 기능. ->코틀린은 강..
📕문제 웅찬이는 과제가 많다. 하루에 한 과제를 끝낼 수 있는데, 과제마다 마감일이 있으므로 모든 과제를 끝내지 못할 수도 있다. 과제마다 끝냈을 때 얻을 수 있는 점수가 있는데, 마감일이 지난 과제는 점수를 받을 수 없다. 웅찬이는 가장 점수를 많이 받을 수 있도록 과제를 수행하고 싶다. 웅찬이를 도와 얻을 수 있는 점수의 최댓값을 구하시오. 📕입력 첫 줄에 정수 N (1 ≤ N ≤ 1,000)이 주어진다. 다음 줄부터 N개의 줄에는 각각 두 정수 d (1 ≤ d ≤ 1,000)와 w (1 ≤ w ≤ 100)가 주어진다. d는 과제 마감일까지 남은 일수를 의미하며, w는 과제의 점수를 의미한다. 📕출력 얻을 수 있는 점수의 최댓값을 출력한다. 💡문제 해석 이 문제도 대표적인 greedy 탐욕 법 문제이..
📕문제 준규가 가지고 있는 동전은 총 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원을 만드는데 필요한 동전 개수의 최솟값을 출력한다. 💡문제 해석 전형적인 탐욕 법 문제이다. N개의 동전을 이용해서 k원을 만들면 되는데 최소한의 동전을 사용해야 한다. 그러면 항상 최선의 선택(여기서는 가장 큰..
📕문제 민식이는 수학학원에서 단어 수학 문제를 푸는 숙제를 받았다. 단어 수학 문제는 N개의 단어로 이루어져 있으며, 각 단어는 알파벳 대문자로만 이루어져 있다. 이때, 각 알파벳 대문자를 0부터 9까지의 숫자 중 하나로 바꿔서 N개의 수를 합하는 문제이다. 같은 알파벳은 같은 숫자로 바꿔야 하며, 두 개 이상의 알파벳이 같은 숫자로 바뀌어지면 안 된다. 예를 들어, GCF + ACDEB를 계산한다고 할 때, A = 9, B = 4, C = 8, D = 6, E = 5, F = 3, G = 7로 결정한다면, 두 수의 합은 99437이 되어서 최대가 될 것이다. N개의 단어가 주어졌을 때, 그 수의 합을 최대로 만드는 프로그램을 작성하시오. 📕입력 첫째 줄에 단어의 개수 N(1 ≤ N ≤ 10)이 주어진다..
📕문제 DNA란 어떤 유전물질을 구성하는 분자이다. 이 DNA는 서로 다른 4가지의 뉴클레오티드로 이루어져 있다(Adenine, Thymine, Guanine, Cytosine). 우리는 어떤 DNA의 물질을 표현할 때, 이 DNA를 이루는 뉴클레오티드의 첫 글자를 따서 표현한다. 만약에 Thymine-Adenine-Adenine-Cytosine-Thymine-Guanine-Cytosine-Cytosine-Guanine-Adenine-Thymine로 이루어진 DNA가 있다고 하면, “TAACTGCCGAT”로 표현할 수 있다. 그리고 Hamming Distance란 길이가 같은 두 DNA가 있을 때, 각 위치의 뉴클오티드 문자가 다른 것의 개수이다. 만약에 “AGCAT"와 ”GGAAT"는 첫 번째 글자와 ..
코틀린이 진화해 오면서 소프트웨어 개발의 거의 모든 측면에 대한 풍부한 라이브러리와 프레임워크가 만들어졌다. 이번 글에서는 코틀린의 사용 가능한 도구를 전반적으로 설명할 예정이다. 1.코루틴 일시 중단 가능한 계산이라는 개념 덕분에 코틀린은 async/await, 퓨처(future), 프라미스(promise), 액터(actor)등의 동시성 관련 프로그래밍 패턴을 지원할 수 있다. 코 루틴 프레임워크는 서버 쪽이거나 모바일, 데스크톱을 위한 것인지와 관계없이 코틀린 애플리케이션에서 동시성 문제를 해결할 수 있는 강력하고 우아하며 쉽게 확장 가능한 해법을 제공한다. 스레드에 대한 거 가벼운 대안 유연한 스레드 디스패치 메커니즘 일시 중단 가능한 시퀀스와 이터레이터 채널을 사용한 메모리 공유 액터를 통해 메시..