일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 백트래킹
- Python
- baekjoon
- GitHub Desktop
- 알고리즘
- 프로콘 갈림현상
- 리트코드
- 코딩테스트
- 제노블레이드 2
- programmers
- Algorithmus
- Ultimate Search
- SRE
- Pro-Con
- 알고리즘 종류 정리
- git
- 백준
- 네이버 검색 시스템
- C++
- 프로그래머스
- 프로콘
- python3
- Github
- DP
- 자소서
- 취준
- 격리수준
- algorithm
- ASF-110
- LeetCode
- Today
- Total
목록전체 글 (76)
산타는 없다
4.5 공용체 서로 다른 데이터형을 한 번에 한 가지만 보관할 수 있는 데이터 형식 여러 데이터형을 보관할 수 있는 데이터 형식이지만 한 시점에 어느 한 가지만 보관할 수 있다. 공용체의 크기는 가장 큰 멤버의 크기가 된다. 익명 공용체 : 이름이 없는 공용체로, 본질적으로 익명 공용체의 멤버들은 동일한 주소를 공유하는 변수들이 된다. 당연히 한 번에 한 멤버만 사용할 수 있다. 공용체는 운영 체제나 하드웨어 데이터 구조에 자주 사용되기도 한다. 4.6 열거체 (enum) 열거체는 대입 연산자만 사용하도록 정의되어 있다. 특히, 산술 연산이 허용되지 않는다. 그러나 일부 C++는 이 제한을 지키지 않는다. 4.7 포인터와 메모리 해제 주소 연산자(&)를 변수 앞에 붙이면 그 변수의 주소(참조값)을 알 수..
참조 카운팅(Reference counting)이란 여러 개의 객체들이 똑같은 값을 가졌으면, 그 객체들로 하여금 그 값을 나타내는 하나의 데이터를 공유하게 해서 데이터의 양을 절약하는 기법 이 기법에는 두 가지 목표가 있다 첫째, 힙 객체를 둘러싼 내부 정보를 유지하는 작업을 단순하게 하자 둘째, 똑같은 값을 가지고 있는 객체들이 그 값을 하나씩 꿰어차도록 놔두는 것은 낭비이므로 그 값을 나타내는 데이터 하나만 공유하게 하면 여러모로 이득이다. 참조 카운팅은 기본적으로 이렇게 구현합니다. 참조 카운트가 저장되는 위치는 굳이 객체 내부에 있을 필요가 없다. 실제 객체 하나에 대해서 참조 카운트는 하나만 잇으면 되기 때문에 참조 카운트와 값을 묶어서 관리해도 된다. 따라서, 참조 카운트와 값을 저장하는 클..
기본 포인터 대신 스마트 포인터를 사용 해야하는 이유 생성(construction)과 소멸(destruction) 작업을 조절할 수 있다. - 생성되고 소멸되는 시기를 결정할 수 있으며, 기본값 0(null)을 가지기 때문에, 값을 주지 않으면 초기화되지 않는 기본 포인터가 일으키는 문제를 원천적으로 봉쇄한다. 복사(copy)와 대입(assignment) 동작을 조절할 수 있다. - 스마트 포인터가 복사되거나 대입될 때 일어나는 일을 결정할 수 있다. 역참조(dereferencing) 동작을 조절할 수 있다. - 사용자가 스마트 포인터가 가리키는 객체를 가져오려고 할 때 어떤 일이 일어날지 결정할 수 있다. 스마트 포인터는 템플릿 기반으로 만들어진다. 그 이유는 가리킬 타입이 정확하게 지정되어야 하기 때..
포인터와 참조자는 모두 다른 객체를 간접적으로 참조할 수 있게 하는 것입니다. 하지만 완전히 같은 것은 아니기 때문에 사용하는 시기를 잘 구분해야 합니다. 참조자 특징 널 참조자는 없다 초기화될 때 참조했던 그 객체만 참조한다 참조자는 위와 같은 특징을 가지기 때문에 포인터와 참조자를 쓸 시기를 구분할 수 있습니다. 포인터를 사용해야 하는 상황 가리킬 객체의 주소가 없을 때 하나의 변수를 가지고 여러 개의 객체를 바꾸어 참조할 때 참조자를 사용해야 하는 상황 참조할 포인터가 처음부터 끝까지 존재할 것임을 알고 있을 때 참조하는 대상 객체를 바꿀 필요가 없을 때 포인터를 사용하면 문법상 의미가 어색해지는 연산자를 구현할 때 참조자를 사용해야 하는 세 가지 경우를 제외하고는 포인터를 사용하는 것이 좋습니다.
#define CALL_WITH_MAX (a, b) ((a) > (b) ? (a) : (b)) int main() { int x = 5, y = 0; CALL_WITH_MAX(++x, y); CALL_WITH_MAX(++x, y + 10); } 위와 같은 매크로 함수가 있을 때 CALL_WITH_MAX(++x, y); 이후의 x의 값은 7이 되고 CALL_WITH_MAX(++x, y + 10); 이후의 x의 값은 8이 된다 그 이유는 일반 함수와 다르게 매크로 함수는 값이 치환되는 개념이기 때문이다 CALL_WITH_MAX(++x, y) -> ((++x) > (y) ? (++x) : (y)) 로 치환되어 비교할 때 한번 그리고 결과를 반환할 때 한번 더 증가되어 총 두 번 증가된다. CALL_WITH_M..
문제 원문 문제 설명 프렌즈대학교 컴퓨터공학과 조교인 제이지는 네오 학과장님의 지시로, 학생들의 인적사항을 정리하는 업무를 담당하게 되었다. 그의 학부 시절 프로그래밍 경험을 되살려, 모든 인적사항을 데이터베이스에 넣기로 하였고, 이를 위해 정리를 하던 중에 후보키(Candidate Key)에 대한 고민이 필요하게 되었다. 후보키에 대한 내용이 잘 기억나지 않던 제이지는, 정확한 내용을 파악하기 위해 데이터베이스 관련 서적을 확인하여 아래와 같은 내용을 확인하였다. 관계 데이터베이스에서 릴레이션(Relation)의 튜플(Tuple)을 유일하게 식별할 수 있는 속성(Attribute) 또는 속성의 집합 중, 다음 두 성질을 만족하는 것을 후보 키(Candidate Key)라고 한다. 유일성(uniquene..
문제 원문 조건 시간 제한 : 1초 메모리 제한 : 512 MB 문제 낚시왕이 상어 낚시를 하는 곳은 크기가 R×C인 격자판으로 나타낼 수 있다. 격자판의 각 칸은 (r, c)로 나타낼 수 있다. r은 행, c는 열이고, (R, C)는 아래 그림에서 가장 오른쪽 아래에 있는 칸이다. 칸에는 상어가 최대 한 마리 들어있을 수 있다. 상어는 크기와 속도를 가지고 있다. 낚시왕은 처음에 1번 열의 한 칸 왼쪽에 있다. 다음은 1초 동안 일어나는 일이며, 아래 적힌 순서대로 일어난다. 낚시왕은 가장 오른쪽 열의 오른쪽 칸에 이동하면 이동을 멈춘다. 낚시왕이 오른쪽으로 한 칸 이동한다. 낚시왕이 있는 열에 있는 상어 중에서 땅과 제일 가까운 상어를 잡는다. 상어를 잡으면 격자판에서 잡은 상어가 사라진다. 상어가 ..
비선점 스케줄링 알고리즘은 이미 할당된 CPU를 다른 프로세스가 강제로 빼앗아 사용할 수 없는 스캐줄링 기법입니다. 프로세스가 CPU를 할당받으면 해당 프로세스가 완료될 때까지 CPU를 사용하게 됩니다. 모든 프로세스에 대한 요구를 공정하게 처리할 수 있고 프로세스 응답 시간의 예측이 용이하며, 일괄 처리 방식에 적합하다는 장점이 있습니다. 하지만 중요한 작업(짧은 작업)이 중요하지 않은 작업(긴 작업)을 기다리는 경우가 발생할 수 있다는 단점이 있습니다. 비선점 스케줄링 알고리즘으론 FCFS, SJF, 우선순위, HRN, 기한부 등의 알고리즘이 있습니다. 그 중 FCFS, SJF, HRN 알고리즘에 대해서 알아보겠습니다. 성능 기준 스케줄링 성능은 평균 대기 시간, 평균 실행 시간, 평균 반환 시간으로..