더듬이의 헬로월드

Hello, World!

728x90

분류 전체보기 59

[백준/자료구조 1/C++] 1874 - 스택 수열

난이도 Silver3 문제집 링크 https://www.acmicpc.net/workbook/view/3953 문제 링크 https://www.acmicpc.net/problem/1874 문제 해결 과정 숫자를 입력 받고 현재 스택에서 가장 높은 숫자보다 높으면, 입력받은 숫자가 될 때까지 최고치를 하나씩 늘리면서 스택에 넣어준다. 그러고 나서, 입력받은 값이 현재 스택의 top이라면, pop! top이 아니라면 NO! 주의할 점 1.문자를 한번에 입력받고 출력해야 버퍼를 덜 사용해야, 실행 시간 을 줄일 수 있다. 2.반복문 사용에 주의해야 한다. 코드 #include #include using namespace std; int main() { stack BOJstack; string result; i..

[C++기본] 28.연결 리스트

연결 리스트란? 연결 리스트는 가변 배열과 뭐가 다를까? 가변 배열은 힙 메모리 공간에 동적 할당을 통해, 일정 크기만큼 사용하는 연속적인 메모리 구조이다. 하지만 연결 리스트는 딱 하나의 메모리만이 들어갈 공간만 만든다. 이는 연속적이지 않은 구조를 가지고 있다. 즉, 3번째 데이터를 찾고 싶다면, 첫번째 데이터부터 각 데이터들이 가진 포인터를 이용해 2번 이동해 3번쨰 위치까지 가는 것이다. 이떄, 이 하나 하나의 구조들을 NODE,노드라고 한다. 노드 하나 하나에는 데이터와 다음 노드로 가는 주소도 같이 들어있다! 이렇게 구성 되어 있을 것이다. 이 노드들의 구성 방식에 따라 대표적으로 세 가지 종류의 연결 리스트가 있는데, 단일 연결 리스트 각 노드가 다음 노드만을 기리키는 일반적인 형태의 연결 ..

[C++STL]Vector, 벡터 컨테이너 사용법(가변 배열)

가변 배열 https://ddecode.tistory.com/entry/C%EA%B8%B0%EB%B3%B8-27%EA%B0%80%EB%B3%80-%EB%B0%B0%EC%97%B4 위 포스팅에 기존 배열의 문제점을 설명하고, 가변 배열의 구현을 해보았다. 굳이 우리가 직접 만들지 않아도 이는 Vector라는 이름으로 STL에 구현되어있다. vector는? 벡터는, 힙 메모리 공간에 생성되는 동적 할당되는 배열이다. 기존 배열보다 효율적으로 메모리를 관리하는 것이 가능하다! 삭제의 경우에도 지원하지만, 맨 끝을 삭제하는 것이 아닌 이상, 삭제할때마다 삭제하는 원소 기준 뒷부분이 앞으로 이동하기에, 삭제가 자주 일어나는 상황에서는 속도가 느려질 수 있다.(연결 리스트를 사용하면 좋다!) vector의 헤더파일..

[C++기본] 27.가변 배열

기존 배열의 문제점 int b; cin>>b; int arr[b]; 위 두 코드는 정상적으로 실행될까? 안된다면, 그 이유는 무엇일까? b는 사용자의 입력에 따라, 10이 될 수도, 100이 될 수도 있다. 그리고, arr의 사이즈는b에 따라 결정된다. 문제는, 이게 런타임 중에 동작한다는 것이다. 이 배열은 지역변수, 스택 메모리 영역에 생성된다. 그럼, 함수가 실헹 될 떄, 메모리를 얼마나 잡아야 하는지 모를 것이다. 크기를 가늠할 수가 없기 때문이다. 그래서 우리는 그때 그때 크기가 늘어나고, 줄어드는 가변 배열을 만들고 싶은 것이다. 가변 배열 자료형 가변 배열을 위한 자료형을 만들어 보자. 첫번째로, 이 가변배열에 데이터를 저장할 곳을 만들어 주어야 한다. typedef struct Holymo..

[C++기본] 26.동적 할당

메모리 영역 오늘 소개하는 동적 할당은 힙 영역에 관련된 이야기다. 우리는 여태 만든 변수들은 모두 스택 영역이나, 데이터 영역만 사용했다. 하지만, 프로그램이 실행되어야지만 알 수 있는 변수가 있을까? 예를 들어, 내가 엔터를 칠 때 마다 변수를 하나씩 생성하고 싶다면? 내가 엔터를 치지 않으면 하나도 생성되지 않을 것이고, 10번 엔터키를 입력한다면 10개의 변수가 생일 것이다, 이거, 가능할까? 동적인 메모리 할당 실행 중인 , 즉 런타임 도중 대응이 가능한 것을 동적 메모리 할당이라고 한다. 이는 코드에 선언하고, 프로그램 실행 전에 이미 만들어 놓은 변수들은 정적인 메모리 영역을 사용하기 떄문에 ,어떠한 변수도 힙 메모리 영역을 사용하지 못한다. 그럼 동적 할당은 어떻게 하나? 그래서 포인터라는..

[C++기본] 25.구조체 포인터

구조체의 멤버 typedef struct Test { int a; float b;//멤버 }Myst; 일단 구조체의 형식을 다시 생각해보자. Myst라는 자료형을 내가 만든 것이다! Myst t1; t1이 곧 Myst라는 형식의 변수가 되는 것이고, Test 안에있는 a,b는 변수가 아닌 멤버(구조체의 멤버)가 되는 것이다. t1.a; 즉, 이것은 t1이라는 변수의 a를 지칭하는 말이다. 구조체와 포인터 Myst s; Myst *Pointer=&s; 그럼 구조체를 가리키는 포인터는 어떻게 계싼될까? 구조체는 하나의 자료형으로 묶여있기 때문에 int 4바이트, float 4바이트, 총 8바이트로 계산되는 포인터 변수가 나올 것이다. 그럼 각 멤버에 접근은 어떻게 해요? (*point).a = 500; (*..

[C++기본] 24.문자열-5

문제. wcscmp함수 만들기 wcscmp는 두 문자열을 입력받고, 이를 사전순으로 비교해서 같으면 0, 첫번째 문자열이 빠르면 -1, 두번째 문자열이 빠르면 1를 반환하는 함수이다. 이 함수는 어떻게 구현하면 좋을까? 필요한 프로세스 1.입력받는 두 문자열의 길이를 구한다. 2.첫번째 문자부터 비교해 나가며 크기를 비교한다. 3.같으면 다음문자, 다르면 비교 후 -1 or 1 출력! 4.끝까지 같다면, 문자열의 길이 를 비교해서 -1 or 1 출력! 5.문자열의 길이까지 같다면, 0출력! int cmpcmp(const wchar_t* left, const wchar_t* right) { //수정할 필요가 없는 함수이다! 상수화 시켜주기 int leftlen = GetLength(left); int ri..

[C++기본] 23.문자열-4

함수 오버로딩이란? void Test(int a){ } void Test(int a,int b){ } void Test(int a, float b){ } 같은 함수 이름이라도, 매개변수의 개수나 자료형을 구분하여 각 해당되는 함수가 호출되는 것을 함수 오버로딩 이라고 한다. 즉, Test(5); Test(5,10); Test(5,15.54); 같은 이름의 함수라도 각 다른 함수를 호출하는 것이다! 문자열 이어 붙이기 함수 직접 만들기 문자열-3에서 포스팅했던 함수 wcscat_s도 오버로딩 된 함수이다. 매개변수를 3개받는 경우도 있는데, 이 경우의 함수를 만들어보자. void StrCat(wchar_t* pDest,unsigned int Size,const wchar_t pSrc){ } 일단 원본 문자..

728x90