g++ 또는 gcc로 빌드해서 실행한다.vscode에서 작성하기 편하게 C++ Extension pack을 설치해 주자여러 파일 빌드 시 cmake 작성 또는 다른 툴 사용 필요main 함수는 항상 int를 리턴타입으로 사용하고 return 0를 적는다.사용되지 않는
Q. 왜 아두이노 ESP32보드를 사용할 때 주소를 char\*로 넘길까?A. 함수에서 char\*를 arg로 받고 있어서Q. 근데 왜 char\*를 쓰죠? string을 써도 되는데?1) char\*로 값을 받으면 길이를 비교하기 편하다.2) 값이 변경되어야 하는 변
선언초기화서로 다른 데이터형을 한 번에 한 가지만 보관enum without flagsenum with flagsQ. 결국 데이터를 코드에 보관하는 격이지 않나? DB에 넣어놓는 편이 낫지 않나?
Java나 Python와 C++의 차이에는 여러 가지가 있겠지만 가장 나를 당황시켰던 것은 앰퍼샌드로 참조 변수를 사용하는 방식이었다.Java와 Python에서는 call by value인 변수가 있고 call by reference인 변수가 있다. 객체 타입에 따라
그래프가 주어졌을 때, 그 그래프의 최소 스패닝 트리를 구하기
위상정렬이란?진입 차수 (In-degree): 각 노드에 대해 들어오는 간선의 수를 나타내는 진입 차수를 계산합니다. 진입 차수가 0인 노드는 시작점이 됩니다.큐를 이용한 처리: 진입 차수가 0인 노드를 큐에 넣습니다. 그리고 큐에서 노드를 하나씩 빼면서 해당 노드에서
우선순위 큐(Priority Queue)우선순위에 따라 요소들을 정렬하는 큐 자료구조C++에서는 <queue> 헤더 파일에 priority_queue 클래스로 구현less<int>: 내림차순 정렬최대 힙(Max Heap)의 형태최대 힙은 부모 노드의 값이 자
팰린드롬?회문(回文) 또는 팰린드롬(palindrome)은 거꾸로 읽어도 제대로 읽는 것과 같은 문장이나 낱말, 숫자, 문자열(sequence of characters)팰린드롬 알고리즘첫 문자와 끝 문자부터 시작하여 차례차례 비교: O(N)의 시간복잡도1) Brute
투 포인터(Two Pointers) 알고리즘리스트 또는 배열에서 두 개의 포인터를 사용하여 원하는 결과를 얻는 알고리즘주로 정렬된 배열 또는 리스트에서 특정 합, 차, 또는 조건을 만족하는 부분 리스트를 찾을 때 사용일반적으로 O(N)의 시간 복잡도를 가짐작성 방법포인
에라토스테네스의 체소수(Prime Number, 1과 자기자신으로만 나누어지는 수)를 찾는 알고리즘단계 1) 2부터 N까지의 모든 수를 소수로 가정 2) 2부터 시작해서 배수 제거: 2를 제외한 2의 배수는 모두 소수가 아님 -> 반복3) 남아있는 모든 수는 소수이
C++에서 문자열 다루기 쉽지 않네전제첫 줄에서는 테스트 케이스 갯수 T를 입력받는다.T개만큼의 데이터는 "R 문자열" 형태로 주어진다.입력cin만 하고 getline() 함수를 실행하면 cin에서 입력된 개행문자가 섞여서 에러가 발생하기 때문에, T만 입력받고 개행문
백트래킹(backtracking)문제의 해를 찾아가는 과정 중 특정 시점에서 더 이상 해를 찾을 가능성이 없다고 판단하면, 그 이전 단계로 돌아가 다른 가능성을 탐색하는 알고리즘주로 모든 가능한 해를 탐색하는 경우에 사용해를 찾기 위해 시도한 경로가 올바르지 않다고 판
map의 value로 key를 찾는 게 번잡하기 때문에숫자를 key로 갖는 map 하나,이름을 key로 갖는 map 하나를 만들어서케이스별로 다른 map에 접근했다.
유니온 파인드(Union-Find)서로소 집합(disjoint set)을 효율적으로 다루기 위한 자료 구조서로소 집합: 서로 교집합이 없는 집합Union(합집합) 연산: 두 개의 서로소 집합을 하나로 합치는 연산Find(찾기) 연산: 어떤 원소가 속한 집합을 찾는 연산
0번 도시에서 시작하여 모든 도시를 한 번씩 방문하고 다시 0번 도시로 돌아오는 최소 비용을 계산하자.도시의 갯수가 16개까지 가능 -> Brute Force를 사용하면 시간 초과방문 여부를 저장해야 하므로 DFS 사용방문 여부 저장 시 비트마스킹 사용처음 호출: df
중복을 허용하지 않으므로 set 사용set의 기본정렬은 오름차순이때 사용되는 less는 bool operator() 함수를 가진 struct정렬기준을 바꾸기 위해 오버로딩을 사용하고, set에 struct를 적용하자.이때, value로 파라미터를 전달해도 결과는 같지만
처음에 주어진 숫자가 7 3이라면원을 이루고 있는 사람은 1 2 3 4 5 6 7 형태이다.1회차에는 3번이 제거된다.2회차에는 4부터 시작해서 3번째인 6번이 제거된다.3회차에는 7부터 시작해서 3번째인 2번이 제거된다.4회차에는 4부터 시작해서 3번째인 7번이 제거
정렬된 배열 또는 리스트에서 특정 원소를 찾기 위해 사용주어진 값과 배열의 중간 값과의 비교를 통해 검색 범위를 반으로 줄여가면서 원소를 찾음중간 원소 찾기중간 원소와 찾고자 하는 값 비교중간 원소와 찾고자 하는 값이 일치하면 원하는 원소를 찾은 것일치하지 않으면 찾고
현재 상태에서 가장 이익이 큰 선택을 하고, 그 선택이 전체적인 최적해로 이어지길 기대하는 알고리즘. 지역 최적해(local optimum)을 선택했을 때 전체 최적해(global optimum)는 찾지 못하는 경우에는 사용할 수 없다.주어진 문제에서는 인출에 걸린 총
추라이 추라이일단 Trie라는 단어를 처음 본 것 같다. 아마 Elastic Search에서 내부적으로 구현해 주고 있었겠지..?Trie?검색 트리의 일종노드가 특정 문자를 나타내며, 루트부터 특정 노드까지 이어지는 경로는 문자열을 나타내는 데이터 구조문자열을 저장하고
모든 원소를 단일 메모리 청크(chunk)에 저장모든 원소가 같은 타입이면, 같은 크기의 메모리를 사용하고, 이는 sizeof(type)으로 표시됨첫 번째 원소의 메모리 주소를 시작 주소(BA, Base Address)라고 함i번째 원소에 접근하려면 BA + i \*
linked data structures노드(node)라고 하는 여러 개의 메모리 청크에 데이터를 저장서로 다른 메모리 위치에 데이터가 저장됨연결 리스트(linked list)의 기본 구조에서 각각의 노드는 저장할 데이터(data)와 다음 노드를 가리키는 포인터(nex
『코딩 테스트를 위한 자료구조와 알고리즘 with C++』 33~37페이지
『코딩 테스트를 위한 자료구조와 알고리즘 with C++』 37~39페이지다양한 타입의 데이터 여러 개를 인자로 받아 공통 타입으로 변환하는 함수를 만들어 보자.다른분 코드를 매우 참고했습니다. 펜윅트리: 누적된 구간의 합을 구해야 할 때 적합. 세그먼트 트리의 응용.
std::array의 크기는 컴파일 시간에 결정되는 상수, 프로그램 실행 중 변경 불가크기가 고정되어 있어서 원소를 추가하거나 삭제할 수 없음메모리 할당 방법 변경 불가, 항상 스택 메모리 사용벡터 초기화 예시벡터에 새로운 원소 추가: push_back() 또는 ins
참고: https://velog.io/@krydyh/프로그래머스-C-옹알이-1
연결 리스트에 대한 래퍼 클래스push_front(): 연결 리스트 맨 앞에 새로운 원소 추가마지막 원소에 직접 접근할 수 없으므로 push_back() 제공 xinsert_after(): 특정 위치에 원소 추가반대 방향으로 이동이 허용되지 않으므로 특정 원소 뒤에 새
참고코드 출처: https://hsin.hr/2006/아래는 vector랑 sort를 안 쓰고 map만 사용해 보려고 했는데 테스트케이스는 통과해도 자꾸 틀렸다고 나오는 코드이건 그보다 전에 주어진 노래 갯수가 1일 때는 확정순위로 저장하고, 아니면 다른 로직
벡터와 배열에서 사용되는 반복자가 기능 면에서 가장 유연random access iterator (임의 접근 반복자) : 벡터와 배열은 연속된 자료 구조를 사용하기 때문에 특정 위치의 원소에 곧바로 접근할 수 있다forward iterator (순방향 반복자) : st
요즘 나는 '일단 돌아가게 만들자'하고 막 짠 코드를 못 고치는 일이 다반사다. 다른 일을 하다 보면 그 코드는 유지보수가 어려운 스파게티가 되어간다. ~~개발을 하랬더니 스파게티 요리사가 되면 어떡해...~~
algorithm 헤더에 내장된 sort 함수의 정렬 방식은 Strict weak ordering을 따른다. 커스텀 compare 함수 작성 시 아래 규칙을 지키지 못하면 런타임 에러가 발생한다. Irreflexibility 비반사성: 모든 x에 대해 x < x는 거짓
문자열 다루기 string to int: stoi int to string: to_string char to int: char - '0' 정수 제곱근 판별 sqrt: 제곱근 만들기 pow: 제곱 만들기 정수 자료형 long long에 담은 후, 이 값을 제곱했을
시간 초과DP 또는 Greedy로 풀이해야 함N칸까지 가는 방법은 N-1칸에서 1칸 이동 또는 N-2칸에서 2칸 이동따라서 N칸까지 가는 방법의 수는 N-1칸까지 가는 방법의 수 + N-2칸까지 가는 방법의 수
참고: https://en.wikipedia.org/wiki/Knapsack_problem물건의 개수를 행으로, 배낭의 용량을 열로 삼고 주어진 개수와 용량에 대한 가치합을 원소로 갖는 2차원 배열 DP 생성테스트 케이스의 입력을 예로 들면1번째 물건의 무게는
DFS와 BFS는 그래프와 트리의 모든 정점/노드를 방문하는 기초 알고리즘이다.그래프와 트리의 차이: 둘다 노드와 간선을 가진다는 점은 같으나, 그래프에서는 트리와 달리 접점마다 간선이 존재하지 않을 수 있으며, 루트 노드와 부모 노드, 자식 노드 개념이 존재하지 않는
문제에서는 거리가 같은 노드가 여러 개 있다면 어느 방향으로 진행한 것이어도 정답으로 인정하고, 어느 방향으로 진행하더라도 불가능한 경로로 답변한 경우 오답으로 처리하고자 한다.