전체 글 105

다중 포인터란

🤔 다중 포인터 사용 이유다중 포인터(multiple pointers)를 사용하는 이유는 다양한 상황에서 메모리 주소를 효율적으로 관리하고 조작하기 위해서이다. 다중 포인터는 '포인터의 포인터'를 뜻 한다.↖️ 다중 포인터 사용 예다른 메모리 영역(함수)에서 동적 메모리로 초기화시켜주고 싶을 때 사용다차원 배열의 할당된 메모리를 해제(반환) 시켜주고 싶을 때 사용TMI배열의 이름을 담을 수 있는 독립적인 메모리가 존재한다.🍡 간접 참조를 통한 동적 메모리 할당 및 값 수정void Change_Refrence(int** ppNum);int main(){ int iNum(100); int* pNum = &iNum; cout 🍡 C에서 문자열 배열 처리char* strings[] = { "He..

바구니 뒤집기  C++

📝 문제https://www.acmicpc.net/problem/10811 문제 설명도현이는 바구니를 총 N개 가지고 있고, 각각의 바구니에는 1번부터 N번까지 번호가 순서대로 적혀져 있다. 바구니는 일렬로 놓여져 있고, 가장 왼쪽 바구니를 1번째 바구니, 그 다음 바구니를 2번째 바구니, ..., 가장 오른쪽 바구니를 N번째 바구니라고 부른다.도현이는 앞으로 M번 바구니의 순서를 역순으로 만들려고 한다. 도현이는 한 번 순서를 역순으로 바꿀 때, 순서를 역순으로 만들 범위를 정하고, 그 범위에 들어있는 바구니의 순서를 역순으로 만든다.바구니의 순서를 어떻게 바꿀지 주어졌을 때, M번 바구니의 순서를 역순으로 만든 다음, 바구니에 적혀있는 번호를 가장 왼쪽 바구니부터 출력하는 프로그램을 작성하시오.입력..

알고리즘/백준 2024.08.14

공 넣기 C++

📝 문제https://www.acmicpc.net/problem/10810 문제 설명도현이는 바구니를 총 N개 가지고 있고, 각각의 바구니에는 1번부터 N번까지 번호가 매겨져 있다. 또, 1번부터 N번까지 번호가 적혀있는 공을 매우 많이 가지고 있다. 가장 처음 바구니에는 공이 들어있지 않으며, 바구니에는 공을 1개만 넣을 수 있다.도현이는 앞으로 M번 공을 넣으려고 한다. 도현이는 한 번 공을 넣을 때, 공을 넣을 바구니 범위를 정하고, 정한 바구니에 모두 같은 번호가 적혀있는 공을 넣는다. 만약, 바구니에 공이 이미 있는 경우에는 들어있는 공을 빼고, 새로 공을 넣는다. 공을 넣을 바구니는 연속되어 있어야 한다.공을 어떻게 넣을지가 주어졌을 때, M번 공을 넣은 이후에 각 바구니에 어떤 공이 들어 ..

알고리즘/백준 2024.08.13

구조체 크기 계산법 및 최적화

🤔 구조체의 크기 결정 이유구조체의 크기는 기본 자료형 멤버 변수 중 가장 큰 자료형을 기준으로 한다.사용자 정의 자료형의 크기는 기준으로 삼지 않는다.char[12]와 int가 있을 때 int형의 4byte를 기준으로 한다.이유는 기본 자료형을 기준으로 하기 때문. 배열의 크기를 따로 기준으로 삼지 않는다.변수들의 초기화 위치도 굉장히 중요하다.작은 메모리의 자료형부터 선언해 줘야 메모리 절약을 할 수 있다.int 형(4byte)로 기준을 삼게 되면 4byte씩 담게 되고, 초과하면 새로운 4byte로 담는다. ex. 같은 자료형이 있는 구조체라도 선언 위치에 따라 크기 변화 예시😊 좋은 예시struct tagInfo { char cName; // 1 short sNmae; // 2 -> 4b..

const와 포인터

🤔 Const 포인터?const 키워드를 활용해 포인터의 특성을 바꿔줄 수 있다.const 주의점const 키워드가 들어가는 이상 선언과 동시에 초기화는 필수이다.📖 읽기 전용 포인터값을 쓰진 못하고 읽을 수만 있다. ex. const int* p = &iNum;int iNum(0);cont int* p = &iNum; // 읽기 전용 포인터++p; // 참조하는 주소를 변경할 수 있다.*p = 100; // *주소에 저장된 값은 변경할 수 없다.cout  📍 상수 포인터처음 초기화 해준 주소만 대입이 가능하다. 이후 대입은 불가능 ex. int* const p = &iNum;int iNum(0);int* const p = &iNum;++p; // *참조하는 주소를 변경할 수 없다.(*p)++; /..

[C/C++]포인터 기초

👉 포인터왜 포인터를 사용해야 하는가?메모리 영역이 다른(중괄호) 변수의 값을 변경하고 싶다.어떻게?가상 메모리에 저장된 변수 주소만 알 수 있다면 다른 메모리 영역에서도 값을 변경할 수 있다.절대 주소란RAM 메모리의 절대 주소(실제 물리적 메모리). 바뀌지 않는.가상 메모리 주소란복사해 준 메모리 주소 ex. (0x0000000) 의 0x대표 주소란복사해준 메모리 첫 번째 주소.ex. 함수에 2가 저장된 int형 변수 메모리 저장 형태RAM    가상 메모리     stack메모리(후입선출) [ ]              [ ]                  0x4[00000000][ ]              [ ]                  0x3[00000000][ ]        >   ..

[C/C++] 함수란

반환 타입 / 함수 이름 / 파라미터 or 인자 or 매개 변수 void Render (*void);TMI : C언어 시절엔 파라미터값이 없을 때 void를 꼭 넣어줘야 했음. 지금은 안 해도 됨.void Render(int _iNum); -> **함수 선언**int main(){ return 0;}void Render(int _iNum) -> **함수 정의**{ std::cout main 함수를 기준으로 위쪽으로는 선언(변수 만들듯 세미 콜론으로 종결), 아래쪽으로는 구현컴퓨터 입장에서 함수의 이름은 함수의 메모리 공간의 첫 번째 주소로 인식한다.() = 함수 호출 연산자💈 함수 형태 4가지파라미터 : void 반환 : void파라미터 : 자료형 반환 : void파라미터 : void 반환 : 자료형(..

피보나치 수 C++

📝 문제https://www.acmicpc.net/problem/2747 문제 설명피보나치 수는 0과 1로 시작한다. 0번째 피보나치 수는 0이고, 1번째 피보나치 수는 1이다. 그다음 2번째부터는 바로 앞 두 피보나치 수의 합이 된다.이를 식으로 써보면 Fn = Fn-1 + Fn-2 (n ≥ 2)가 된다.n=17일때 까지 피보나치 수를 써보면 다음과 같다.0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597n이 주어졌을 때, n번째 피보나치 수를 구하는 프로그램을 작성하시오.입력첫째 줄에 n이 주어진다. n은 45보다 작거나 같은 자연수이다.입출력 예 설명예제 입력10예제 출력55첫 번째 풀이 코드 - 시간 초과#include>..

알고리즘/백준 2024.07.25

[C/C++] 분기문

🤔 분기문이란?원하는 조건에 따라 코드를 실행할지 하지 않을지 정할 수 있는 문법이다.📚 분기분 3가지 종류와 특징go to : 여러 문제가 발생할 수 있어 암묵적으로 사용하지 말아야 하는 문법이다.이유는 스파게티 코드가 되기 때문인데, 레이블(라벨)이 붙어진 곳까지 바로 넘어가는 기능이 여러 번 사용된다면 유지보수가 힘들어지기 때문이다.goto skip; // 라벨이름을 skip으로 설정std::cout if : 분기문도 맞지만 조건문으로 많이 불림.조건이 참일 경우 실행되는 문법중괄호 안에서 변수를 선언 시 메모리의 영역이 달라진다.if (조건식){ // 실행될 코드}else if (조건식 유형에 맞는 다른 조건식){ // 실행될 코드}else // 모든 조건이 거짓일 경우 실행{ // 실행될 코..

가상 메모리

🤔 가상 메모리란?운영체제는 현재 가지고 있는 메모리를 가지고 프로그램들에게 뻥튀기해서 사용할 수 있는 가상 메모리를 제공한다. (물리적인 메모리보다 큰 메모리를 공간을 제공) 한정된 메모리에서 파악하기 힘든 속도로 빠르게 메모리를 빌려주고 돌려받는다.*멀티 프로세싱📒 참고자료https://namu.wiki/w/가상 메모리[CS/운영체제(OS)] 가상 메모리 (Virtual Memory)

컴퓨터 구조 2024.07.22