📕문제 웅찬이는 과제가 많다. 하루에 한 과제를 끝낼 수 있는데, 과제마다 마감일이 있으므로 모든 과제를 끝내지 못할 수도 있다. 과제마다 끝냈을 때 얻을 수 있는 점수가 있는데, 마감일이 지난 과제는 점수를 받을 수 없다. 웅찬이는 가장 점수를 많이 받을 수 있도록 과제를 수행하고 싶다. 웅찬이를 도와 얻을 수 있는 점수의 최댓값을 구하시오. 📕입력 첫 줄에 정수 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)등의 동시성 관련 프로그래밍 패턴을 지원할 수 있다. 코 루틴 프레임워크는 서버 쪽이거나 모바일, 데스크톱을 위한 것인지와 관계없이 코틀린 애플리케이션에서 동시성 문제를 해결할 수 있는 강력하고 우아하며 쉽게 확장 가능한 해법을 제공한다. 스레드에 대한 거 가벼운 대안 유연한 스레드 디스패치 메커니즘 일시 중단 가능한 시퀀스와 이터레이터 채널을 사용한 메모리 공유 액터를 통해 메시..
내가 이번 방학에 공부하기로 한 언어는 kotlin [코틀린]이다. 보통 애플리케이션을 개발할 때 사용하는 언어이고 훌륭하고 효율적인 언어로 평가받는다. 코틀린은 안전성, 간결성, 상호 윤용성을 강조하는 다중 패러다임, 다중 플랫폼 프로그래밍 언어다. 📕코틀린의 장점 1. 안전성 프로그래밍 언어가 안전하려면 프로그래머의 오류를 방지할 수 있어야 한다. 실전에서 오류를 방지하려면 대가가 필요하기 때문에 안전성을 고려해 언어를 설계하는 것은 트레이드오프의 문제이다. 코틀린의 설계 목표 중 하나는 황금비를 찾아내는 것이었다. 즉 자바보다 더 안전성을 보장하는 언어를 설계하되, 개발자의 생산성을 덜 해치는 언어를 만드는 것이다. 타입 추론으로 인해 개발자가 명시적으로 지정하지 않아도 된다 날이 될 수 있는 타입..
📕문제 어떤 수식이 주어졌을 때, 괄호를 제거해서 나올 수 있는 서로 다른 식의 개수를 계산하는 프로그램을 작성하시오. 이 수식은 괄호가 올바르게 쳐져 있다. 예를 들면, 1+2, (3+4), (3+4*(5+6))와 같은 식은 괄호가 서로 쌍이 맞으므로 올바른 식이다. 하지만, 1+(2*3, ((2+3)*4와 같은 식은 쌍이 맞지 않는 괄호가 있으므로 올바른 식이 아니다. 괄호를 제거할 때는, 항상 쌍이 되는 괄호끼리 제거해야 한다. 예를 들어 (2+(2*2)+2)에서 괄호를 제거하면, (2+2*2+2), 2+(2*2)+2, 2+2*2+2를 만들 수 있다. 하지만, (2+2*2)+2와 2+(2*2+2)는 만들 수 없다. 그 이유는 쌍이 되지 않는 괄호를 제거했기 때문이다. 어떤 식을 여러 쌍의 괄호가 감..
📕문제 크기가 3 × 3인 배열 A가 있다. 배열의 인덱스는 1부터 시작한다. 1초가 지날 때마다 배열에 연산이 적용된다. R 연산: 배열 A의 모든 행에 대해서 정렬을 수행한다. 행의 개수 ≥ 열의 개수인 경우에 적용된다. C 연산: 배열 A의 모든 열에 대해서 정렬을 수행한다. 행의 개수 행과 열의 개수를 비교함. bool flag(함수) R연산일 때는 true를, C연산일 때는 false를 반환함. R연산 행을 고정시키고, 열을 증가시키면서 그 값과 빈도수를 기록해야 함. 나는 map을 이용해서 key값을 값으로 하고, value값을 빈도수로 지정함. map의 형태는 map m이다. 숫자마다 빈도수를 저장하기 위해서 map을 썼지만, 정렬하기 위해서 pair를 사용. pair의 first에는 빈도수..
📕문제 상근이는 문자열에 폭발 문자열을 심어 놓았다. 폭발 문자열이 폭발하면 그 문자는 문자열에서 사라지며, 남은 문자열은 합쳐지게 된다. 폭발은 다음과 같은 과정으로 진행된다. 문자열이 폭발 문자열을 포함하고 있는 경우에, 모든 폭발 문자열이 폭발하게 된다. 남은 문자열을 순서대로 이어 붙여 새로운 문자열을 만든다. 새로 생긴 문자열에 폭발 문자열이 포함되어 있을 수도 있다. 폭발은 폭발 문자열이 문자열에 없을 때까지 계속된다. 상근이는 모든 폭발이 끝난 후에 어떤 문자열이 남는지 구해보려고 한다. 남아있는 문자가 없는 경우가 있다. 이때는 "FRULA"를 출력한다. 폭발 문자열은 같은 문자를 두 개 이상 포함하지 않는다. 📕입력 첫째 줄에 문자열이 주어진다. 문자열의 길이는 1보다 크거나 같고, 1,..