* 스레드 상태 종류 Unstarted : 스레드 생성 후 Start() 메서드가 실행되기 전(스레드 시작하기 전) 상태Running : 스레드가 동작 중인 상태 Suspended : 스레드 일시 중지 상태. Thread.Rewume() 메소드 호출까지 대기 WaitSleepJoin : 스레드 일시 중지 상태. 특정 조건까지만 대기* Thread.Sleep()특정 ms 시간만큼 스레드가 대기하는 것 * Thread.Join()다른 스레드가 실행이 끝날 때까지 대기하는 것 Aborted : 강제 종료. 보이기에는 바로 종료되어 보이지만 근데 실제로는 바로 종료되는 게 아니라 일정 시간 후에 종료됨 포그라운드 스레드가 죽어버리면 해당 프로세스는 꺼진다.백그라운드 스레드는 죽어도 프로세스 수명에 영..
* 프로세스와 스레드- 프로세스는 반드시 하나 이상의 스레드로 구성되어진다.- 둘 이상의 스레드를 동시에 실행하면 멀티스레드라 한다. * 스레드- 운영체제가 CPU에 시간을 할당하는 (일을 시키는) 기본 단위- 운영체제가 명령어를 실행하기 위한 스케줄링 단위 * 멀티 스레드의 장점1. 동시에 여러 작업을 할 수 있다.2. 데이터 공유가 쉽다. * 유니티에서 코루틴을 쓰는 이유유니티는 게임 로직 쓰레드(메인 쓰레드) 1개에서만 게임 로직을 짤 수 있다. 스레드를 만들어 사용하면, 그 스레드에서는 유니티의 기능을 사용할 수없다. 그래서 코루틴을 사용해 병렬 처리(하지만 실제로는 동기로 작동)를 구현하는 것이다. ex)using System.Threading;using UnityEngine;public cla..
readonly List sessionItems = new List(); 위와 같이 List가 readonly인 경우, sessionItems에 새로운 List 인스턴스를 할당하는 건 안되지만,Add(), Remove(), Clear()같이 내부 요소를 수정하는 메소드는 사용이 가능하다! C#의 readonly 키워드와 불변성에 대해위 글에 따르면, readonly 키워드가 참조형의 내부 상태가 바뀌는 것까진 막아주지 못한다고 한다. 현업에서 쓰고있는 C# 5.0 ~ 7.3 기능 정리readonly List 에 관하여위 글도 다시 보고 참고하기
#include #include // sort함수int arr[1000];int n;int binarySearch(int target) { int start = 0; int end = n - 1; while (start target) end = mid - 1; else return 1; } return 0; // 찾는 수가 없으면 start > end가 되므로 while문 탈출}int main(){ std::ios::sync_with_stdio(0); std::cin.tie(0); std::cin >> n; for (int i = 0; i > arr[i]; } std::sort(arr, arr + n); int t = 0; std::cin >> t; binarySearch(t);} http..
#include #include // x가 행, y가 열 #define X first #define Y second int board[502][502] = { {1,1,1,0,1,0,0,0,0,0}, {1,0,0,0,1,0,0,0,0,0}, {1,1,1,0,1,0,0,0,0,0}, {1,1,0,0,1,0,0,0,0,0}, {0,1,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0} }; bool visited[502][502]; int n = 7, m = 10; int dx[4] = { 1,0,-1,0 }; int dy[4] = { 0,1,0,-1 }; int main() { //std::ios::sync_with_stdio(0)..
자료형 크기 최솟값 최댓값 short 2byte -2^15 (= -32768) 2^15 - 1 (= 32767) int 4byte -2^31 (≒ -2.1 * 10^9) 2^31 - 1 (≒ 2.1 * 10^9) long long 8byte -2^63 (≒ -9.2 * 10^18) 2^63 - 1 (≒ 9.2 * 10^18) 만약 unsigned long long보다 더 큰 범위의 정수를 저장해야한다면 string으로 저장해야된다. 자료형 크기 최솟값(lowest) 최댓값(max) 최소유한값(min) float 4byte -3.4 * 10^38 3.4 * 10^38 1.1 * 10^-38 double 8byte -1.7 * 10^308 1.7 * 10^308 2.2 ..
https://chanheess.tistory.com/154 vector와 list의 차이점 vector 연속적인 메모리. 미래에 들어갈 요소를 위해 선할당을 한다 각 요소는 요소 타입 그자체만큼의 공간을 요구한다 (포인터들을 포함하지 않는다). 당신이 요소를 추가하는 어느 때나, 전체 v chanheess.tistory.com 위 글에 정리가 잘 되어있다. https://www.acmicpc.net/problem/1406 1406번: 에디터 첫째 줄에는 초기에 편집기에 입력되어 있는 문자열이 주어진다. 이 문자열은 길이가 N이고, 영어 소문자로만 이루어져 있으며, 길이는 100,000을 넘지 않는다. 둘째 줄에는 입력할 명령어의 개수 www.acmicpc.net 위 문제에서 vector를 사용해 ins..
1. 요소들이 메모리에 연속적으로 저장된다(cache hit↑) -> 그러므로 중간에 원소를 삽입/삭제하면 메모리가 재할당된다. 2. capacity(할당된 메모리 크기)가 있다.(vector만이 가지고 있음)(reverse()를 통해 capacity를 설정할 수 있다) -> 주어진 capacity보다 더 많은 요소를 삽입하면 약 1.5배씩 capacity가 커진다.(메모리 재할당 이루어짐) 1. 요소들이 메모리에 연속적이지 않다(연결리스트 느낌인듯) -> 중간에 원소를 삽입하면 메모리 블럭 하나를 할당하는 방식 앞에서 삽입/삭제 과정이 많음 -> 덱 나머지 -> 벡터 https://novlog.tistory.com/4 [C++ STL] ..
#include const int MX = 1000005; int dat[2 * MX + 1]; int head = MX, tail = MX; void push_front(int x) { head--; dat[head] = x; } void push_back(int x) { dat[tail] = x; tail++; } void pop_front() { head++; } void pop_back() { tail--; } int front() { return dat[head]; } int back() { return dat[tail - 1]; } void test() { push_back(30); // 30 std::cout
#include #include const int MX = 1000005; int dat[MX]; int head = 0, tail = 0; void push(int x) { dat[tail] = x; tail++; } void pop() { head++; } int front() { return dat[head]; } int back() { return dat[tail - 1]; } void test() { push(10); push(20); push(30); std::cout
1. #include 를 포함해주어야함 2. 함수의 인수로 넘겨질 때 주소값이 넘겨지는 것이 아니라 배열이 복사된다. 그러므로 함수에서 배열 값이 수정되어도 실제로는 변화가 없음! 3. 벡터끼리 = 연산을 하면 deep copy가 된다. 4. c#의 List와 같이 크기를 줄였다 늘렸다 할 수 있다. 5. v라는 벡터가 있을 때 v.size()는 unsigned int형이기 때문에 실제 사이즈가 0이라면 v.size()-1은 -1이 아닌 언더플로우가 발생하기 때문에 유의해야한다. 5. vector 사용법 참고자료 https://blockdmask.tistory.com/70 [C++] vector container 정리 및 사용법 안녕하세요. BlockDMask 입니다.오늘은 C++ STL의 sequenc..