본문 바로가기
728x90

자료구조&알고리즘15

[백준] 18298번 : 오큰수 (Kotlin) 17298번: 오큰수 첫째 줄에 수열 A의 크기 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에 수열 A의 원소 A1, A2, ..., AN (1 ≤ Ai ≤ 1,000,000)이 주어진다. www.acmicpc.net 안좋은 습관이지만 해당 문제를 보고 '엥 이게 골드4..?' 라는 생각을 먼저 했습니다. 시간초과 import java.lang.StringBuilder fun main() { val n = readLine()!!.toInt() val numbers = readLine()!!.split(" ").map { it.toInt() }.toTypedArray() val sb = StringBuilder() for (i in numbers.indices) { var nge = -1 .. 2023. 1. 24.
[자료구조] Kotlin으로 자료구조 이해하기 - Queue(큐) Queue Queue의 사전적 정의는 '줄, 줄을 서서 기다리다'라는 의미를 갖습니다. 자료구조로서 Queue는 선입선출(FIFO : First In First Out)의 방식으로 데이터를 저장하는 구조를 의미합니다. 예를 들어, 빈 Queue에 1, 2, 3, 4, 5의 순서로 데이터가 들어간다면 들어간 순서대로 1, 2, 3, 4, 5의 순서로 나오게 됩니다. 먼저 들어간게 먼저 나오는 선입선출이라는 키워드를 생각한다면 이해가 쉽습니다. Queue는 위와 같이 선언할 수 있습니다. Stack과 마찬가지로 자바의 Queue를 import하여 사용하지만 Queue는 인터페이스이기 때문에 LinkedList 클래스로 초기화해서 사용하겠습니다. Queue에서 제공하는 주요 기능은 다음과 같습니다. add, .. 2023. 1. 23.
[자료구조] Kotlin으로 자료구조 이해하기 - Stack Stack Stack의 사전적 의미는 '쌓다, 포개지다'라는 의미로 자료구조로서 Stack은 후입선출(LIFO : Last In First Out) 방식으로 데이터를 저장하는 구조를 의미합니다. 쉽게 말해, 먼저 들어온 데이터부터 하단에 쌓여 가장 늦게 들어온 데이터가 가장 먼저 나가는 구조를 갖게 됩니다. 예를 들어, 빈 Stack에 1,2,3,4,5의 순서로 데이터가 삽입된다면 데이터를 꺼낼 때는 5,4,3,2,1의 순서로 나오게 됩니다. 상자를 쌓을 때 먼저 쌓는 상자가 아래에 쌓이는 상황을 생각하면 될 것 같습니다. Kotlin 자체적으로 Stack이 구현되어 있지는 않지만 "java.util.Stack"을 import 하여 사용할 수 있습니다. Stack 클래스는 다양한 기능을 지원합니다. 키워.. 2023. 1. 22.
[백준] 2798번 : 블랙잭 (Kotlin) + 브루트포스 알고리즘 2798번: 블랙잭 첫째 줄에 카드의 개수 N(3 ≤ N ≤ 100)과 M(10 ≤ M ≤ 300,000)이 주어진다. 둘째 줄에는 카드에 쓰여 있는 수가 주어지며, 이 값은 100,000을 넘지 않는 양의 정수이다. 합이 M을 넘지 않는 카드 3장 www.acmicpc.net 백준 2798번 블랙잭 예제를 통해 브루트포스(Brute Force) 알고리즘에 대해 알아보겠습니다. 브루트포스(Brute Force) 브루트포스는 모든 경우의 수를 탐색하면서 조건에 만족하는 결과를 추출하는 완전탐색 알고리즘입니다. 브루트포스 알고리즘은 모든 경우의 수를 탐색하기 때문에 비용이 많이 들고 시간이 오래 걸린다는 치명적인 단점이 있지만 반드시 조건에 만족하는 결과를 도출해 낸다는 특징이 있습니다. 선형적인 구조에서는.. 2023. 1. 20.
[백준] 11653번 : 소인수분해 (Kotlin) 11653번: 소인수분해 첫째 줄에 정수 N (1 ≤ N ≤ 10,000,000)이 주어진다. www.acmicpc.net 나의 풀이 fun main(args: Array) { var N = readLine()!!.toInt() var count = 2 while (N != 1) { if (N % count == 0) { println(count) N /= count } else { count++ } } } ☞ 입력값 N에 대해 2부터 시작하는 count로 나누어지는지 확인합니다. 나누어진다면 count를 증가시키지 않고 같은 값으로 다시 확인합니다. 계속해서 나누어지지 않더라도 결국 count와 N이 같아지는 순간까지 나누면 N을 count로 나눈 값이 1이 되기 때문에 while문이 종료됩니다. 2023. 1. 19.
[백준] 1181번 : 단어 정렬 (Kotlin) 1181번: 단어 정렬 첫째 줄에 단어의 개수 N이 주어진다. (1 ≤ N ≤ 20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주어진다. 주어지는 문자열의 길이는 50을 넘지 않는다. www.acmicpc.net 나의 풀이 fun main(args: Array) { val n = readLine()!!.toInt() val arr = ArrayList() repeat(n) { val input = readLine()!!.toString() arr.add(input) } // distinct()는 List 반환 val arr2 = arr.distinct().toTypedArray() val result= arr2.sortedWith(Comparator { o1,.. 2023. 1. 9.
728x90
반응형