https://www.acmicpc.net/problem/2309 2309번: 일곱 난쟁이 아홉 개의 줄에 걸쳐 난쟁이들의 키가 주어진다. 주어지는 키는 100을 넘지 않는 자연수이며, 아홉 난쟁이의 키는 모두 다르며, 가능한 정답이 여러 가지인 경우에는 아무거나 출력한다. www.acmicpc.net 난이도 : 브론즈 1 태그 : 정렬, 브루트포스 설명 9명의 난쟁이가 주어졌을 때, 합이 100이 되는 7명의 난쟁이를 찾는 문제입니다. 9명의 난쟁이 키의 합을 구한 뒤, 9명 중 2명을 선택해 난쟁이 키 합에서 뺀 뒤, 100이 되는 케이스를 찾으면 될 것 같습니다. 소스코드 fun main() { val height = Array(9) { 0 } repeat(9) { height[it] = readL..
https://www.acmicpc.net/problem/18110 18110번: solved.ac 5명의 15%는 0.75명으로, 이를 반올림하면 1명이다. 따라서 solved.ac는 가장 높은 난이도 의견과 가장 낮은 난이도 의견을 하나씩 제외하고, {5, 5, 7}에 대한 평균으로 문제 난이도를 결정한다. www.acmicpc.net 난이도 : 실버 4 태그 : 수학, 구현, 정렬 설명 Solved.ac 의 문제 난이도 계산 방법을 바탕으로 만든 문제인 것 같네요. 솔브드의 난이도 계산 시스템은 극단적인 값으로 인해 평균이 왜곡되는 것을 막기 위해 절사 평균을 사용하는데요. 단순히 의견 개수 * 0.15 (반올림)개 만큼 양극값을 제거하고 평균을 계산하면 됩니다. 소스코드 fun main() = w..
https://www.acmicpc.net/problem/11000 11000번: 강의실 배정 첫 번째 줄에 N이 주어진다. (1 ≤ N ≤ 200,000) 이후 N개의 줄에 Si, Ti가 주어진다. (0 ≤ Si < Ti ≤ 109) www.acmicpc.net 난이도 : 골드 5 태그 : 자료 구조, 그리디 알고리즘, 정렬, 우선순위 큐 설명 한 시간대에 동시에 진행중인 강의가 몇 개인지 체크하는 문제입니다. 가장 처음 든 생각은 아무래도 int 배열을 체크해놓고 하나씩 체크해볼까? 생각했지만, 시작, 끝 시간의 범위 (0 ≤ Si < Ti ≤ 109)를 보고 바로 다른 방법을 고민하였습니다. 아무래도 우선순위 큐를 사용해 그리디적으로 풀 수 있을 것 같네요. 위와 같이 그림으로 그려 나타내면 쉬울 ..
https://www.acmicpc.net/problem/13904 13904번: 과제 예제에서 다섯 번째, 네 번째, 두 번째, 첫 번째, 일곱 번째 과제 순으로 수행하고, 세 번째, 여섯 번째 과제를 포기하면 185점을 얻을 수 있다. www.acmicpc.net 난이도 : 골드 3 태그 : 자료 구조, 그리디 알고리즘, 정렬, 우선순위 큐 설명 과제는 마감일이 있고, 과제 하나를 끝내는 데에는 하루가 걸립니다. 과제를 풀 때마다 각기 다른 점수를 얻을 수 있을 때, 점수의 최댓값을 구하는 문제입니다. 어려운 것 같지만 천천히 접근해봅시다. 최댓값을 구하려면, 어떤 숙제를 해야 할까요? 바로 점수가 높은 숙제부터 하는 것입니다. 그럼 숙제를 언제 해야 할까요? 각 숙제는 마감일 안에 언제든지 하면 됩..
https://www.acmicpc.net/problem/24479 24479번: 알고리즘 수업 - 깊이 우선 탐색 1 첫째 줄에 정점의 수 N (5 ≤ N ≤ 100,000), 간선의 수 M (1 ≤ M ≤ 200,000), 시작 정점 R (1 ≤ R ≤ N)이 주어진다. 다음 M개 줄에 간선 정보 u v가 주어지며 정점 u와 정점 v의 가중치 1인 양 www.acmicpc.net 난이도 : 실버 2 태그 : 그래프 이론, 그래프 탐색, 정렬, 깊이 우선 탐색 설명 이름 처럼 깊이 우선 탐색 (DFS, Depth First Search)의 연습문제 입니다. 그래프를 탐색하는데는 여러 방법이 있습니다. 그 중 꽤 유명한 탐색방법인 DFS를 연습해봅시다. DFS는 트리 or 그래프에서 최대한 깊이 탐색한 ..
개발을 하다보면 간혹가다가 배열 혹은 리스트를 정렬할 때, 여러 프로퍼티를 기준으로 정렬을 해야할 때가 있습니다. 아래와 같이 이름, 나이, 키, 몸무게를 프로퍼티로 가지는 Person 클래스가 있습니다. class Person(val name: String, val age: Int, val height: Int, val weight: Int) Person 클래스의 배열도 있고요. val list = arrayOf( Person("홍길동", 20, 170, 60), Person("전우치", 30, 180, 70), Person("사스케", 40, 160, 50), Person("나루토", 50, 175, 65), ) 그렇다면, 위 사람들을 나이 순서로 정렬하려면 어떻게 해야 할까요? list.sortBy..
https://www.acmicpc.net/problem/11004 11004번: K번째 수 수 N개 A1, A2, ..., AN이 주어진다. A를 오름차순 정렬했을 때, 앞에서부터 K번째 있는 수를 구하는 프로그램을 작성하시오. www.acmicpc.net 난이도 : 실버 5 태그 : 정렬 설명 정렬하고, k번째로 큰 수를 출력하는 문제입니다. 소스코드 import java.util.* fun main() = with(System.`in`.bufferedReader()) { val (n, k) = readLine().split(" ").map { it.toInt() } StringTokenizer(readLine()).let { st -> val arr = Array(n) { st.nextToken()..
https://www.acmicpc.net/problem/1302 1302번: 베스트셀러 첫째 줄에 오늘 하루 동안 팔린 책의 개수 N이 주어진다. 이 값은 1,000보다 작거나 같은 자연수이다. 둘째부터 N개의 줄에 책의 제목이 입력으로 들어온다. 책의 제목의 길이는 50보다 작거나 같고 www.acmicpc.net 난이도 : 실버 3 태그 : 자료 구조, 문자열, 정렬, 해시를 사용한 집합과 맵 설명 이 문제 같은 경우, 문자열 별로 카운트를 해야 하므로, 해시맵을 유용하게 쓸 수 있겠습니다. 소스코드 fun main(): Unit = with(System.`in`.bufferedReader()) { val hashMap = HashMap() repeat(readLine().toInt()) { val..
https://www.acmicpc.net/problem/2693 2693번: N번째 큰 수 첫째 줄에 테스트 케이스의 개수 T(1 ≤ T ≤ 1,000)가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있고, 배열 A의 원소 10개가 공백으로 구분되어 주어진다. 이 원소는 1보다 크거나 같고, 1,000 www.acmicpc.net 난이도 : 브론즈 1 태그 : 정렬 설명 각 배열들이 주어졌을때, 배열들의 n번째 큰 수를 출력하는 문제입니다. 크기가 항상 10이고 n은 항상 3인데... 문제 제목이 왜 n번째 큰 수인지 모르겠네요. 보통 n번째 큰수라 하면 입력으로 n을 받을텐데, 조금 독특한 문제인 것 같습니다. 소스코드 import java.util.StringTokenizer fun main()..
https://www.acmicpc.net/problem/11656 11656번: 접미사 배열 첫째 줄에 문자열 S가 주어진다. S는 알파벳 소문자로만 이루어져 있고, 길이는 1,000보다 작거나 같다. www.acmicpc.net 난이도 : 실버 4 태그 : 문자열, 정렬 설명 문자열 s의 모든 접미사 배열을 정렬해 출력하는 문제입니다. 단순히, 문자열의 첫번째부터 마지막, 두 번째 부터 마지막, 세 번째 부터 마지막, 네 번째 부터 마지막 . . . 마지막 문자열 까지, ArrayList에 넣어준다음, 정렬하면 되겠네요. 소스코드 fun main() { val origin = readln() val strArray = ArrayList() for (i in origin.indices) { strArr..