👩🏻‍💻 Programming/C++ 14

lower_bound와 upper_bound

두 함수 모두 C++에서 이진 탐색을 활용하여 원소의 위치를 찾아낼때 활용한다. 공통적으로 아래 두 가지 특징을 지니고 있다. 1. 배열, 혹은 벡터가 오름차순으로 정렬되어있어야 함 2. algorithm 라이브러리를 사용함 lower_bound 목적 : 찾으려는 key 값이 배열, 혹은 벡터의 몇 번째에 존재하는지 반환 Tip 1 : key값이 존재하지 않을 경우, 찾으려는 key값보다 바로 다음으로 큰 값의 위치를 반환 (ex : 아래 예시에서 -1의 lower_bound 결과를 찾을 경우, 0을 반환) Tip 2 : key값과 key값보다 큰 값 모두 존재하지 않을 경우, 배열의 size를 반환함 (ex : 아래 예시에서 6을 찾을 경우 5를 반환) 사용법 // 사용법 lower_bound(배열, ..

memset과 fill메모리 초기화 함수

bool check[50][50] = { false, }; // 일련의 과정으로 check에는 false와 true가 골고루 입력되었다 int main(void) { for (int i = 0; i < 50; i++) { for (int j = 0; j < 50; j++) { check[i][j] = false; } } return 0; } 배열을 특정 값으로 초기화 해야하는 경우가 있다고 가정하자. 위와 같은 50*50의 배열의 경우, 2중 for문을 통해 초기화 할 수 있다. 하지만 배열의 크기가 점점 커질수록 메모리 낭비는 심해질 것이다. 이때 사용할 수 있는 함수가 memset과 fill이다. Memset : 0(false)으로 채우자 #include //memset을 위해 필요하다. bool c..

vector<int> v(n)과 vector<int> v[n]의 차이

vector v(n) N의 크기만큼 배열을 생성하며, 동시에 각 배열의 값을 0으로 초기화한다. push_back으로 값을 입력해도 되며, 배열의 값을 직접적으로 입력해도 된다. 각 배열에 별도의 입력값이 주어지지 않을 경우 '0'으로 출력된다. vector v[n] n*사용자가 앞으로 입력하게 되는 값의 갯수 만큼의 2차원 배열이 생성된다. 입력은 push_back을 활용한다. 출처 : www.quora.com/What-is-the-difference-between-vector-int-v-N-and-vector-int-v-N What is the difference between vector v(N) and vector v [N]? Answer (1 of 4): Whenever we de..

2차원 vector, 그리고 3차원 Vector

Vector을 사용해 2차원 배열을 만들 수 있다. (두 개의 객체를 묶어주는 pair와는 다르다) Vector의 2차원 배열 선언 : vector v(행의 값, vector(열의 값, 초기화 값)); Vector의 2차원 배열 값 삽입 : v[i][j]; // 예시 int n = 0; cin >> n; vector arr(n + 1, vector(n + 1, 0)); arr[0][0] = 1; vector와는 다르게 위는 동적할당으로 만들어진 벡터이다. Pair 선언 : vector v; Pair 삽입 : v.push_back(pair(타입1의 값, 타입2의 값)); // 예시 vector v; for(int i=0; i> a >> b; v.push_back(make_pair(a,b)); } 3차원 v..

숫자->문자열(to_string), 문자->숫자(stoi)

1. 숫자를 문자열로 to_string(int변수 이름)을 사용하면 된다. 문자열에서 원하는 문자가 존재하는지 찾는 함수를 사용할 수 있다 (find 혹은 substr) int형 변수에서도 원하는 숫자가 존재하는지 찾을 수는 있으나, 숫자가 길어질수록 다소 번거롭다는 단점이 있으니 때때로 문자열로 변환하는 창의력이 요구된다. 2. 문자열을 숫자로 stoi(string변수 이름)을 사용하면 된다. 간간히 사용되는 함수들이니 꼭 기억하자.

Find()와 Substr()

백준 2941번 '크로아티아 알파벳' 문제를 풀며 떠올린 메소드 들이다. https://www.acmicpc.net/problem/2941 2941번: 크로아티아 알파벳 문제 예전에는 운영체제에서 크로아티아 알파벳을 입력할 수가 없었다. 따라서, 다음과 같이 크로아티아 알파벳을 변경해서 입력했다. 크로아티아 알파벳 변경 č c= ć c- dž dz= đ d- lj lj nj nj š s= ž z= 예를 들어, ljes=njak은 크로아티아 알파벳 6개(lj, e, š, nj, a, k)로 이루어져 있다. 단어가 주어졌을 때, 몇 개의 크로아티아 알파벳으로 이루어져 있는지 출력한다. dž는 무조건 하나의 알파벳으로 쓰이고, www.acmicpc.net Find()의 개념을 착각하고 있어서 푸는데 시간이 다..

공백이 포함된 문자열 받기

일반적으로 C++에서 Cin을 이용하여 String 변수의 값을 받으면, 공백 이전까지의 문자를 받게 된다. 공백까지 포함해서 문자열을 저장하고싶다면 Cin이 아닌 Getline을 이용해야한다. 항상 문자열, 혹은 문자타입 배열 (ex: char c[10])만 받을 수 있음을 기억하자. 이렇게 문자열을 받거나, 아래처럼 문자타입의 배열을 받아주면 된다.