👩🏻‍💻 Programming 88

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])만 받을 수 있음을 기억하자. 이렇게 문자열을 받거나, 아래처럼 문자타입의 배열을 받아주면 된다.

While문과 EOF

만약 c++에서 while문을 사용하여 변수의 값을 받을 때, 데이터의 갯수가 정해지지 않는다면 어떻게 할까? 별 다른 데이터 갯수의 제한 없이 무한 루프를 사용한다면 자원 활용은 굉장히 비효율적이게 된다. C였다면 EOF를 사용하였을 것이다. C++에서는 간단하게 하기와 같은 로직을 이용하면 된다. #include using namespace std; int main(){ ios_base::sync_with_stdio(false); cin.tie(NULL); int a,b = 0; while(cin >> a >> b){ // cin >> a >> b를 작성하면 무한루프가 발생한다. // -1(EOF)를 입력하면 while문을 빠져나오게 된다. // 특정 조건(ex : 0입력시 종료)은 말 그대로 if를..

Cin과 Cout

c++에서 cin과 cout는 입출력 타입을 따로 지정할 필요가 없다. 이 외에도 예외처리가 강하고 기능이 많아서 c++에서는 필수적으로 쓰이는 기능이다. 하지만 scanf, printf보다는 느리다는 단점이 있다. 알고리즘 문제를 풀 경우, 빠르게 연산한 값을 출력하는 것이 관건이므로 시간을 단축시켜야 할 필요가 있다. 백준의 문제를 풀 경우, c언어를 그대로 사용하여 알고리즘 문제를 풀어도 상관은 없다. 만약 c++문법을 그대로 사용하되, scanf나 printf처럼 빠른 계산을 원한다면 하단과 같은 규칙을 갖고 코드를 작성하면 된다. 1. ios_base::sync_with_stdio(false); 2. cin.tie(NULL); 3. endl 대신 "\n" 사용