목록

    [백준/Kotlin/14425] 문자열 집합

    문제 14425번: 문자열 집합 첫째 줄에 문자열의 개수 N과 M (1 ≤ N ≤ 10,000, 1 ≤ M ≤ 10,000)이 주어진다. 다음 N개의 줄에는 집합 S에 포함되어 있는 문자열들이 주어진다. 다음 M개의 줄에는 검사해야 하는 문자열들이 주어 www.acmicpc.net 총 N개의 문자열로 이루어진 집합 S가 주어진다. 입력으로 주어지는 M개의 문자열 중에서 집합 S에 포함되어 있는 것이 총 몇 개인지 구하는 프로그램을 작성하시오. 입력 첫째 줄에 문자열의 개수 N과 M (1 ≤ N ≤ 10,000, 1 ≤ M ≤ 10,000)이 주어진다. 다음 N개의 줄에는 집합 S에 포함되어 있는 문자열들이 주어진다. 다음 M개의 줄에는 검사해야 하는 문자열들이 주어진다. 입력으로 주어지는 문자열은 알파벳..

    [백준/Kotlin/10815] 숫자 카드

    문제 10815번: 숫자 카드 첫째 줄에 상근이가 가지고 있는 숫자 카드의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 둘째 줄에는 숫자 카드에 적혀있는 정수가 주어진다. 숫자 카드에 적혀있는 수는 -10,000,000보다 크거나 같고, 10, www.acmicpc.net 숫자 카드는 정수 하나가 적혀져 있는 카드이다. 상근이는 숫자 카드 N개를 가지고 있다. 정수 M개가 주어졌을 때, 이 수가 적혀있는 숫자 카드를 상근이가 가지고 있는지 아닌지를 구하는 프로그램을 작성하시오. 입력 첫째 줄에 상근이가 가지고 있는 숫자 카드의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 둘째 줄에는 숫자 카드에 적혀있는 정수가 주어진다. 숫자 카드에 적혀있는 수는 -10,000,000보다 크거나 같고, 1..

    객체 지향 프로그래밍

    먼저 객체지향 프로그래밍이 등장하게 된 배경을 이해하기 위해 객체 지향 프로그래밍 등장 이전에 존재했던 여러 가지 프로그래밍 패러다임 중 '비구조적 프로그래밍' 과 '절차적 프로그래밍'에 대해 알아보자. 비구조적 프로그래밍 - 정의한 기능의 흐름에 따라 순서대로 동작하며 프로그램을 완성하는 방식으로, 작은 프로그램일 경우엔 흐름이 한눈에 보여 직관적이다는 장점이 있다. 하지만 프로그램의 크기에 살이 붙어 커질 경우엔 큰 단점이 되는데, 예를 들면 기능 A->B->C 순서로 동작하다 C에서 갑자기 A로 돌아가야 할 경우 스파게티 코드가 되어 버리 때문에 직관적인 장점이 사라지게 된다. 이러한 단점을 보완하기 위해 등장한 다음 패러다임은 절차적 프로그래밍이다. 절차적(구조적) 프로그래밍 - 절차적 프로그래밍..

    Garbage Collection

    JVM이 구성된 JRE의 구성 요소 중 Garbage Collection은 객체를 생성한 이후에 더 이상 사용하지 않는 경우 메모리 릭을 방지하기 위하여 자동으로 메모리 해제를 수행한다. GC를 실행하기 위해서는 JVM 기반의 어플리케이션의 실행을 멈추는 'stop-the-world'가 발생하게 되는데, 'stop-the-world'가 발생하는 경우엔 GC를 실행하는 스레드를 제외한 나머지 스레드는 작업을 중단한다. 물론 GC를 완료하고 중단됐던 작업이 재개되지만 프로그램의 성능 최적화를 위해선 'stop-the-world'의 발생 빈도를 줄여 GC 성능 최적화가 필요하다. JVM의 메모리는 Class, Stack, Heap, Native Method, PC 이렇게 5가지로 구성되어 있는데 GC는 Hea..

    Process와 Thread

    프로세스는 운영 체제로부터 자원을 할당받아 동작하는 작업의 단위이고 스레드는 할당 받은 자원을 이용하는 실행의 단위이고 프로세스 내에서 최소 하나 혹은 그 이상이 될 수 있다. 어플리케이션 하나가 프로세스이고, 그 안에서 발생하는 동작의 단위가 스레드이다. multi process와 multi thread 멀티 프로세스는 하나의 프로그램을 여러 개의 프로세스로 구성하여 각 프로세스가 하나의 작업(Task)을 실행하게 된다. - 장점 : 하나의 프로세스에 문제가 생기더라도 다른 프로세스에 영향을 끼치지 않는다. - 단점 : 프로세스마다 독립된 메모리 영역을 할당받아 상호 공유하는 메모리 공간이 없어 (캐시 메모리 초기화 등) 무거운 작업의 context switching이 발생한다. *context swi..

    [Kotlin] 스레드와 코루틴

    스레드와 코루틴은 동시성을 보장하고, 비동기 작업을 하기 위해 많이 사용된다는 공통점이 있다. 동시성은 말그대로 여러가지 작업을 한번에 수행하는 것이지만, 실제 동작은 시분할 기법을 활용하여 여러 작업들을 조금씩 나누어 번갈아가며 실행기때문에 사용자입장에서는 여러 작업이 동시에 일어나는것처럼 느껴지게 된다. 비동기 작업은 특정 작업을 수행할 때 작업이 끝날 때까지 기다리지 않고 다른 작업을 수행할 수 있는 특징이 있다. 그런데, 스레드와 코틀린은 근본적으로 큰 차이점이 존재한다. 스레드는 각 Task에 해당하는 Stack메모리를 할당받고 동시에 여러 작업을 수행할때 OS는 어떤 스레드 작업을 먼저 수행해야 효율적인지에 대한 스케쥴링(선점 스케쥴링)을 한다. Task 단위는 Thread이며 JVM의 Sta..