C++

· Algorithm
https://www.acmicpc.net/problem/5430함수 R : 배열에 있는 수를 뒤집는다. 처음에는 배열을 직접 뒤집는 함수를 구현했으나, 시간이 너무 오래 걸려bool을 사용해 함수를 뒤집었다고 인식하게 하였다. (Reverse = false : 뒤집지 않음, Reverse = true : 뒤집음) 함수 D : 배열의 첫번쨰 수를 제거한다. 즉, Reverse = false인 경우 배열의 첫번쨰 수를 제거(front) 하고, Reverse = true인 경우 배열의 마지막 수를 제거한다(end)    배열이 비었을 떄 D를 사용 시 error를 출력한다. 여기까지는 배열만 입력해서 출력하는 간단한 문제인 줄 알았으나,배열을 대괄호 안에 쉼표로 구분하여 입력해야 한다.  getline과 s..
· Algorithm
https://www.acmicpc.net/problem/7662문제를 정리하자면,1. 이중 우선순위 큐: 데이터의 삽입과 삭제가 가능한 자료 구조로, 삭제할 때 우선순위가 가장 높은 데이터 또는 가장 낮은 데이터를 삭제할 수 있는 이중 우선순위 큐를 구현한다. 2. 명령어:- I n : 정수 n을 큐에 삽입하는 연산- D 1: 큐에서 최댓값을 삭제하는 연산- D -1: 큐에서 최솟값을 삭제하는 연산 3. 입력과 출력:I. 첫 번째 줄에 테스트 데이터의 수를 나타내는 정수 T, 각 테스트 데이터는 k개의 연산으로 구성된다.II. 각 연산은 문자 ('D' 또는 'I') 와 정수 n으로 이루어져 있다.III. 각 테스트 데이터에 대해, 모든 연산을 처리한 후 큐에 남아 있는 값 중 최댓값과 최솟값을 출력IV..
· Algorithm
https://www.acmicpc.net/problem/10026구역을 나누는 문제는 보통 BFS나 DFS로 해결할 수 있다. 필자는 DFS를 이용하였다. 먼저 구역을 나누는 함수를 구현 후, 색약이 바라보는 구역을 구현하기 위해G를 R로 변환하는 함수를 구현한다.   코드#include #include using namespace std;const int dx[] = { -1, 1, 0, 0 };const int dy[] = { 0, 0, -1, 1 };void dfs(vector>& grid, vector>& visited, int x, int y, char color){ visited[x][y] = true; // 방문 위치를 방문했다고 저장 for (int i = 0; i = 0 &&..
· Algorithm
https://www.acmicpc.net/problem/30804주어진 문제는 막대에 꽂힌 과일들 중에서 두 종류 이하의 과일만 남도록 앞쪽과 뒤쪽에서 몇 개의 과일을 빼내어 과일의개수가 가장 많은 경우를 찾는 것이다.  조건:1. 과일의 총 개수 N이 주어짐 2. 과일의 종류는 1부터 9까지이며, 각 과일은 S1,S2,....,SN과 같이 나열된다.   3. 앞에서 a개 뒤에서 b개의 과일을 뺼 수 있다. 4. 두 종류 이하의 과일만 남기도록 하여, 남은 과일의 개수가 최대가 되도록 해야 한다.    이 문제를 어떻게 접근해야 할까?접근 방법을 두 케이스로 나눠봤다. 접근 방법:1. 빈도수 카운트:- 각 과일의 빈도 수를 카운트하여, 현재 과일 종류를 추적- 빈도 수를 관리하여, 두 종류를 초과하면 ..
· Etc.
E0266 에러가 발생한 예제 일부분원인원인을 찾아보니 함수 이름 중 count 라는 함수 이름이 존재한다는 것을 알게 되었다.함수 이름과 동일한 변수 이름을 설정하고 이를 선언했을 때 같은 이름으로 재정의 내리기에이러한 에러가 나타난다고 한다.  해결 방법다양한 해결 방법이 있었지만, 나는 변수 이름을 바꿔주어 이 문제를 해결하였다.(변수 이름과 함수 이름이 같기에 에러가 난다고 판단아였기에, 변수 이름만 바꾸면 쉽게 해결될 문제라고 판단) 내가 생각했던 대로 count -> cnt로 변수 이름을 변경 하였더니 별 다른 문제 없이 해결되었다.
· Etc.
포인터포인터는 다른 변수나 메모리의 주소를 저장하는 변수이다.코드를 작성하면서 포인터의 개념이 부족하다고 느껴 포인터에 대해 공부하고 기록하려고 한다.   I. 포인터 선언 및 초기화포인터는 특정 데이터 형식의 변수를 가리키는 변수이다. 포인터를 선언할 때는 데이터 형식 뒤에 '*' 를 붙인다.int* ptr; // int 형 변수를 가리키는 포인터char* cptr; // char 형 변수를 가리키는 포인터 또한 포인터는 다른 변수의 주소를 저장한다.주소를 할당하려면 주소 연산자 '&' 를 사용한다.int a = 10;int* ptr = &a; // 'a' 변수의 주소를 ptr에 저장 II. 포인터의 역참조포인터를 통해 실제 변수에 접근할 수 있다.이를 역참조라고 하며 '*' 연산자를 사용한다.in..
· Etc.
댕글링 포인터프로그램이 더 이상 유효하지 않은 메모리 주소를 참조하는 포인터를 의미한다. 이는 메모리 안전성과 프로그램의 안전성을 저하시킬 수 있는 중요한 문제이다. 댕글링 포인터가 발생하는 주요 원인과 그 결과, 그리고 이를 방지하는 방법에 대해 알아보자 댕글링 포인터가 발생하는 주요 원인I. 객체 해제 후 포인터 사용:메모리 해제(삭제) 후에도 여전히 포인터가 해당 메모리를 가리키고 있는 경우, 해당 포인터는 더 이상 유효한 메모리를 참조하지 않게 된다.  이때 그 포인터를 댕글링 포인터라고 한다.int* ptr = new int(10);delete ptr; // 메모리 해제*ptr = 20; // 댕글링 포인터 사용, 정의되지 않은 동작(UB) II. 스택 메모리 참조:함수가 반환된 후 스택에..
· Algorithm
https://www.acmicpc.net/problem/16928뱀과 사다리 게임을 플레이할 때, 1번 칸에서 100번 칸까지 도착하기 위해 주사위를 최소로 굴린 횟수를 구하는 문제이다.이때 여기서 주어진 입력은 사다리와 뱀의 정보가 주어진다.  최단 경로를 찾아야 하며, 그러기 위해서는 모든 칸을 탐색해야 하고, 방문한 칸을 체크하여 중복으로 방문하는 것을 막아야하니 BFS로 계산하는게 효율적이겠다고 판단하여 BFS로 구현하였다.  코드#include #include #include #include // INT_MAX 사용을 위해 추가using namespace std;vector> ladder;vector> snake;vector moves(101, INT_MAX); // 칸 별 이동 횟수를 저장..
· Algorithm
https://www.acmicpc.net/problem/1012 이 문제는 연결된 영역을 찾는 문제로 볼 수 있다. 배추들이 인접해있는 영역을 찾고 각 영역에 대해 최소한의 배추흰지렁이의 수를 계산하면 된다. 코드 #include #include using namespace std; void dfs(vector& field, int x, int y, int m, int n) { //값이 음수이거나, 행렬을 벗어나거나, 이미 방문한 노드, 즉 배추가 없다면 탐색하지 않는다. if (x = m || y = n || field[x][y] == 0) { return; } field[x][y] = 0; // 이미 방문한 배추는 0으로 표시 // 상하좌우로 이동하며 배추가 있는..
· Algorithm
https://www.acmicpc.net/problem/1931 이 문제는 회의실을 최대한 활용하여 겹치지 않는 회의를 많이 배정하는 것을 목표로 한다. 이런 유형의 문제는 그리디 알고리즘을 활용하여 효율적으로 해결이 가능하다. 코드 #include #include #include using namespace std; int main() { int n; cin >> n; vector list; for (int i = 0; i > start >> end; list.push_back(make_pair(end, start)); } sort(list.begin(), list.end()); int time = list[0].first; int count..
alsrudwls01
'C++' 태그의 글 목록