전체 글
[BOJ] 1541 잃어버린 괄호 - 그리디 알고리즘
[BOJ] 1541 잃어버린 괄호 - 그리디 알고리즘
2022.02.06매우 간단한 문제이다. 마이너스가 한번 뜨면 그 이후로는 무조건 음수로 만들수 있다. WHY? 그 이후에 오는 연산자가 + 이면 괄호로 합쳐서 음수로 만들수 있고, 연산자가 - 라면 그 이후에 괄호를 칠 수 있고, 이후의 식이 또 다시 음수가 되기 때문이다. 예를 들어 10 - 20 + 30 + 40 - 50 + 60 이라고 하자. 다음과 괄호를 칠 수 있다. 10 -(20 + 30 + 40) - (50 + 60) 10 -20 + 30 + 40 + 50 + 60 이라면? 10 -(20 + 30 + 40 + 50 + 60) #include charbuffer[1024] = { 0 , }; charoperators[100] = { 0 , }; intNumbers[100] = { 0 , }; inttempNu..
[BOJ] 11399 ATM - 그리디 알고리즘
[BOJ] 11399 ATM - 그리디 알고리즘
2022.02.06시간이 오래걸리는 사람은 뒤에 두는 것이 무조건 이득이다. 앞에다 두면 둘수록 뒤의 인원에 시간이 더해지기 때문이다. 정말 간단하다.1 , 4 , 8 을 보자. 8을 맨 앞에 배치하면 8이 3번 더해진다. 1을 맨 앞에 배치하면 1이 3번 더해진다. 4를 맨 앞에 배치하면 4가 3번 더해진다. 각 인원의 ATM 인출시간을 정렬한다. 그리고 뒤에 남은 인원의 수에 자신의 소요시간을 곱해서 차례로 더해나간다. #include #include int Time[1001]; int N; int main() { std::cin.tie(0); std::cout.tie(0); std::cin.sync_with_stdio(false); std::cout.sync_with_stdio(false); std::cin >> N..
[BOJ] 11047 동전 0 - 그리디 알고리즘
[BOJ] 11047 동전 0 - 그리디 알고리즘
2022.02.06큰 동전의 액면가는 작은 동전의 액면가로 무조건 나누어 떨어진다. 다음과 같은 식이다. 5000 1000 500 100 50 25 5 따라서 문제는 간단해진다. 작은 액면가의 동전을 큰 액면가의 동전으로 바꾸어 나가면 된다. 간단한 예를 들어보자. 280원을 만드려고 한다면, 우선 5 원짜리 56개로 시작한다. 5원 짜리에서 25원 짜리로 가기위해선 5원짜리 5개가 필요하다. 25원짜리 11개와 5원 짜리 1개로 바꾼다. 위와 같은 식으로 그냥 바꿔나가기만 하면 답이 된다. 너무 간단하다. #include int Balance[11] = { 0 , }; int CoinValues[11] = { 0 , }; int N = 0; int K = 0; int main() { std::cin.tie(0); std..
Windows OS - 스레드(Thread) 2편
Windows OS - 스레드(Thread) 2편
2022.02.01스레드가 마지막으로 사용했던 레지스터 정보인 Context를 로드한다. 할당받은 시간을 모두 사용하고 다시 메모리에 Context를 저장시킨다. (상술 했듯이 커널메모리 안의 스레드 커널 오브젝트 안에 Context가 저장된다.) 이게 반복되면 시스템에 돌고있는 스레드들이 모두 실행되는 것이다. 윈도우즈 OS는 실시간 OS가 아닌 선점형 멀티스레드 기반 OS이다. OS에 의해 물흐르듯 일어나는 스케쥴링 작업을 App을 작성하는 프로그래머의 마음대로 변경하거나 교체 하는 것에는 한계가 있다. App에서의 스레드 통제는 어디까지나 OS의 판단하에서 적합한 기준내에서 실행된다. 스레드의 정지와 재개 스레드의 정지란 해당 스레드가 CPU시간을 할당받지 않도록 설정하는 것이다. 스레드 커널 오브젝트 내에는 정지카..
[C++] C++ new 연산자 오버로딩을 이용한 메모리 풀 만들기
[C++] C++ new 연산자 오버로딩을 이용한 메모리 풀 만들기
2022.01.27메모리풀을 만들때에 AllocInstance나 ReleaseInstance같은 정적함수들을 구현해서 객체 생성시에 사용하기도 한다.물론 좋은 방법이지만, 템플릿을 사용할때에 귀찮은 일이 발생한다. 템플릿 함수 내에서 풀링을 사용하려면 강제로 형변환을 해야하며, AllocInstance 와 ReleaseInstance 사용하는 경우와 그렇지 않은 경우를 두개를 만들어야 한다. 귀찮은 여러 작업이 동반된다는 것은 다시말해 그만큼 타입 특정에 대해서 실수할 위험성이 항상 존재한다는 이야기이기도 하다. 템플릿으로 인터페이스를 만들고 new 와 delete를 오버로딩하는 방법을 사용하면, 이런 귀찮음과 위험을 해결할 수 있다. new와 delete는 어디까지나 연산자이기 때문이다. 별도로 Initialize 같은..