목록C++ (24)
Seung's Learning Record
STACK 이란? 한쪽 끝에서만 원소를 삽입/삭제할 수 있는 자료구조이다. FILO(First In Last Out)구조로 가장 먼저 삽입된 원소가 가장 나중에 빠져나온다. 원소가 삭제되는 위치를 최상단, top이라고 부른다. STACK 성질 원소의 추가 O(1) 원소의 제거 O(1) 최상단의 원소 확인 O(1) 최상단의 원소를 제외한 나머지 원소들은 확인 및 변경은 원칙적으로 불가능 STACK 구현 스택의 구현 방법에는 배열을 사용하여 구현하는 방법과 STL을 사용하는 방법이 있다. 배열을 사용한 구현 const int MX = 1000000; int dat[MX]; int pos = 0;//다음 원소가 삽입될 인덱스 정보 //원소 삽입 void push(int x){ dat[pos++] = x; } ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/baWfJs/btszCE2zzka/cGwntr9tajGgdiTLbu3De1/img.png)
해당 문제를 풀기 위해 필요한 사전 지식으로는 아스키코드와 배열정도일 것이다. 당장에 구글에만 쳐봐도 정답 코드가 넘쳐난다. 그러던중 바킹독님의 풀이가 유독 눈에 띄어서 정리할 겸 가져와봤다. #include #include using namespace std; int main(void){ int arr[26]={0}; string s; cin >> s; for(auto c : s) arr[c-'a']++; for(auto i : arr) cout
c++ 11버전 이후로는 범위 기반 반복문을 사용할 수 있다. 범위 기반 반복문이란 시작과 끝점을 알려주지 않아도 알아서 처음부터 끝까지 순회를 해주는 반복문이다. 사용법 for(int elem : arr){ elem ++; cout
배열 배열이란 index와 그에 대응되는 데이터들로 이루어진 자료구조이며, 일반적으로 같은 타입의 데이터들이 순차적으로 메모리에 저장된다. 배열의 성질 O(1)에 k번째 원소를 확인/ 변경 가능 추가적으로 소모되는 메모리의 양, 즉 overhead가 거의 없음 Cache hit rate가 높음 메모리 상에 연속한 구간을 잡아야 해서 할당에 제약이 걸림 배열의 선언 당시 지정된 크기로 고정됨. => 사이즈를 벗어난 인덱스에 접근 시, 런타임 에러 발생 int arr1[5]={1,2,3}// 1,2,3,0,0 int arr2[]={1,2,3,4,5} //크기 5로 고정됨 int arr3[5]={0};// 원소가 모두 0으로 초기화 됨 int arr4[5];//원소가 모두 쓰레기값으로 초기화 됨 이때 배열의 ..
정렬을 아주 쉽게 도와주는 sort()함수는 헤더를 include 하여 사용할 수 있다. sort()함수는 C++ STL에서 제공하는 함수로써 각종 알고리즘 문제를 풀 때 자주 활용하는데 이 함수의 시간 복잡도는 nlogn이다. #include #include // sort()함수를 사용하기 위해 을 include 한다. using namespace std; int main(void){ int arr[5] = {3, 5, 9, 7, 8}; // 첫번째 인자 = 배열의 포인터 // 두번째 인자 = 배열의 포인터 + 배열의 크기 sort(arr, arr+5); //출력 for(int i=0; i
구현해야하는 모든 함수들을 main함수에 작성하면 어떻게 될까? 100줄이 넘지 않는 코드라면 큰 문제까지는 없을 것이다. 하지만 코드가 점점 늘어나고, 구현해야하는 기능들이 많아진다면 하나의 함수에 모두 작성하기가 어려울 것이다. 그 때문에 기능 등의 단위로 코드를 나누어 짜는것이 중요하며, 이를 위해 함수라는 것이 존재한다. 함수를 사용하면 코드의 재사용이 가능하기 때문에 훨씬 쉽고 효율적으로 코딩을 할 수 있다. 함수는 크게 두가지로 분류된다. 이미 다른사람들이 만들어놓은 라이브러리 함수와 직접 만들어 사용하는 사용자 정의 함수가 있다. 라이브러리 함수 라이브러리 함수는 미리 만들어져서 제공되는 함수로, printf()와 같은 것들이 있다. 라이브러리 함수를 사용하기 위해선 해당 함수의 정보가 들어..
코딩을 하다보면 여러 제어문들을 사용하게된다. 오늘은 그 중 하나인 조건문에 대해 정리해보자! if 문 if문의 구성은 아래와 같다. if( 조건문 ){ 명령문; } => if문의 필수부분으로 조건이 참일 경우 명령문을 실행한다. 조건이 거짓이면 다음 조건문으로 pass! else if ( 조건문 ){ 명령문; } => 판별해야할 조건이 여러가지일 경우 사용되며, 명령문 실행 조건은 if절과 동일하다. else { 명령문; } => 상위 모든 조건이 거짓일 경우, else절의 명령문이 실행된다. #include using namespace std; int main(){ int score; char grade; cout > score; if (score >= 90) grade = 'A'; else if (..
키보드를 통해 입력하는 것을 표준 입력, 데이터를 출력해내는 것을 표준 출력이라고 한다. c++에서는 이 표준 입출력이 어떻게 이루어지는지 확인해보자! #include c에선 표준 입출력 함수 사용을 위해 stdio.h 헤더파일을 include해준다. c++에서 이와 같은 역할을 해주는것이 바로 iostream이다. c++에서 사용자 정의 헤더를 제외한 표준 헤더 파일을 가져올땐 .h를 붙이지 않는점을 주의하자. cin, cout c언어의 표준 입출력 방식과 가장 큰 차이점은 아무래도 변수의 형식을 신경써도되지 않는다는 점이 아닐까싶다. c++의 표준 입출력 함수를 사용할 땐 사용하려는 변수의 자료형을 알지 못하여도 사용할 수 있다. 컴파일러가 가장 알맞은 자료형을 선택해서 적용해주기 때문에 사용자의 실..
c++은 풍부한 데이터형이 존재하며 이 덕분에 사용자는 선택의 폭이 넓지만 컴퓨터의 처리가 복잡해 질 수 있다. 이 때문에 C++은 아래와 같은 상황에서 데이터형의 변환 기능을 제공한다. 1. 특정 데이터형의 변수에 다른 데이터형의 값을 대입했을 때 2. 수식에 데이터형을 혼합하여 사용했을 때 3. 함수에 매개변수를 전달할 때 #include using namespace std; int main(){ int a = 1.2345; cout
다음은 원의 넓이를 구하는 간단한 코드이다. #include int main(){ int r = 3; float s = r * r * 3.141592; int r2 = 4; float s2 = r2 * r2 * 3.141592; return 0; } 해당 코드에선 반지름이 다른 두 원의 넓이를 구하기 위해 똑같은 코드가 반복되고 있다. 반복되는 두 코드 중 3.141592라는 수는 변하지 않는다. 만약 원의 개수가 만개가 넘어가게 될 경우 (함수를 쓰지 않는다는 전제하에) 3.141592 라는 수를 계속해서 반복 타이핑을 하게 될텐데 이 과정에서 오탈자가 발생할 가능성이 있다. 이를 방지하기 위해 우리는 상수라는 개념을 사용할 수 있다. #include int main(){ const float PIE ..