TIL💡(277)
-
[Java] 스레드 생명 주기 상태
생성 상태(NEW) 생성(NEW)되었지만 시작되지 않은 스레드이다. 각 스레드에 start 메서드가 호출되기 전까지의 상태이다. 실행 대기 상태(RUNNABLE) 각 스레드에 start 메서드를 호출하면 스레드가 생성 상태에서 실행 대기(RUNNABLE) 상태로 전환된다. 실행 대기 상태에서의 스레드는 실행 중이거나 실행할 준비가 된 상태이다. JVM 스레드 스케줄러가 실행에 필요한 리소스와 시간을 할당하기를 기다리는 스레드는 실행할 준비가 되었지만, 아직 실행되지는 않는다. CPU가 사용할 수 있게 되면 스레드 스케줄러가 스레드를 실행한다. Runnable runnable1 = () => {} Thread t1 = new Thread(runnable1); t1.start(); 블록 상태(BLOCKED)..
2022.10.21 -
[Java] 자바 동시성(멀티스레딩)의 개요
프로세스와 스레드 프로세스: 프로그램 또는 애플리케이션의 실행 인스턴스 스레드: 프로세스의 실행 가능한 가장 작은 (CPU) 작업 단위 자바 스레드는 오버헤드가 상대적으로 낮고 다른 스레드와 공통 메모리 공간을 공유한다. 동시성과 병렬성 동시성은 하나의 애플리케이션에서 여러 작업을 관리하는 능력을 의미한다. 프로그램이나 애플리케이션은 한 번에 하나의 작업을 처리(순차 처리)하거나 동시에 여러 작업을 처리(병행 처리)할 수 있다. 동시성을 병렬성(Parallelism)과 혼동하면 안된다. 병렬성은 애플리케이션이 서로 다른 개별 작업을 동시에 처리하는 능력이다. 💡 동시성은 많은 일을 한 번에 관리하는 것을 의미하고, 병렬성은 많은 일을 동시에 실행하는 것을 의미한다. 동시성은 멀티 스레딩으로 구현할 수 있..
2022.10.21 -
[Python] @classmethod와 @staticmethod의 차이
@classmethod 클래스 메서드는 인스턴스 메서드가 인스턴스를 받는 것처럼 클래스를 첫 번째 인수로 수신한다.(cls) 클래스 메서드는 C++, Java의 static method와 다르다. 다른 이유는 아래에 나온다. @staticmethod 메서드를 정적 메서드로 변환시켜준다. 클래스 바디에 함수에 대한 참조가 필요하고, 인스턴스 메서드로 자동 변환하지 않는 경우에 사용 얼핏 봐서는 둘의 차이가 극명하지 않다. 둘은 상속이 일어날 때 확실히 차이가 있다. class Person: default= "아빠" def __init__(self): self.data = self.default @classmethod def class_person(cls): return cls() @staticmethod ..
2022.10.20 -
[정렬] Radix Sort(기수 정렬) 정리
How Radix Sort works? 구성요소들을 마지막 자릿수 기반으로 정렬한다.(Least Significant Digit) 그리고 그 결과는 다시 마지막에서 두 번째 자릿수 기반으로 정렬하고, 이러한 행위를 가장 큰 자릿수(Most Significant Digit)까지 행한다. Key Points for radix sort algorithm Radix Sort는 선형의 정렬 알고리즘이다. Radix Sort의 시간 복잡도는 $O(nd)$로, 배열의 크기는 n이며, d는 가장 큰 수의 자릿수이다. 이는 In-place sorting 알고리즘이 아니므로, 추가 공간이 필요하다. Radix sort는 Stable Sort로, 상대적인 순서가 보존된다. Radix sort는 다른 merge sort나 q..
2022.10.19 -
[백준] 17779번: 게리맨더링2
https://www.acmicpc.net/problem/17779 17779번: 게리맨더링 2 재현시의 시장 구재현은 지난 몇 년간 게리맨더링을 통해서 자신의 당에게 유리하게 선거구를 획정했다. 견제할 권력이 없어진 구재현은 권력을 매우 부당하게 행사했고, 심지어는 시의 이름 www.acmicpc.net 문제를 처음부터 제대로 안 읽고 얼기설기 덧대면서 풀었더니 푸는 데 시간이 예상보다 오래 걸렸다. 이 문제를 처음 보면 너무 어렵다고 생각이 드나, 주어진 x와 y의 범위를 코드에 그대로 녹이면 어렵지 않게 풀 수 있다. 대신 핵심은 5번 선거구를 획정할 것인가이다. 우선 경계선은 문제에서 주어졌는데, 경계선 내부 또한 5번 선거구로 획정해야 한다. 처음에는 d1, d2의 길이 차이에 따른 패턴을 형성..
2022.10.15 -
[백준] 17140번: 이차원 배열과 연산
https://www.acmicpc.net/problem/17140 17140번: 이차원 배열과 연산 첫째 줄에 r, c, k가 주어진다. (1 ≤ r, c, k ≤ 100) 둘째 줄부터 3개의 줄에 배열 A에 들어있는 수가 주어진다. 배열 A에 들어있는 수는 100보다 작거나 같은 자연수이다. www.acmicpc.net vector의 resize함수를 잘 쓰면 어렵지 않게 풀 수 있는 문제이다. 2차원 vector의 resize는 적용이 원하는 대로 안되어서 행마다 resize를 vector.resize(n, value) 로 해주었다. 이 함수는 만약 해당 크기보다 원래 작으면 value로 채워서 만들고, 해당 크기보다 원래 크면 크기에 맞게 자른다. 그리고 행마다 열마다 배열을 정렬하는데, 어차피 ..
2022.10.15