전체 글 314

[C++] 셋 이상 수의 최대공약수(GCD) 구하기

- 두 수의 GCD를 구해주는 GCD 함수를 정의하고 int GCD(int x, int y) { while(true) { if(x>y) { x = x%y; if(x==0) return y; } else { y = y%x; if(y==0) return x; } } } - 연속한 데이터끼리 GCD를 구한다, 반복적으로 적용하기 위해 cyclic하게 동작할 수 있는 Queue 자료형 활용 - Queue에 데이터가 한 개 남는다면 그것이 GCD 일 것. (최적화: GCD 리턴값 1이면 바로 break) queue q; // data int x1, x2, gcd; while(true) { x1 = q.front(); q.pop(); if(q.empty()) { gcd = x1; break; } x2 = q.fro..

BOJ 2023.08.18

[C++] user input 숫자인지 문자인지 파악하기, map 자료형 카운터처럼 사용하기

user input 숫자인지 문자인지 - stoi(), stol(), stod() 등의 함수 에러처리로 파악한다 bool check_number(string s) { try { stoi(s); } catch (const invalid_argument& e) { // 숫자 형태 아닐 때 return false; } catch (const out_of_range& e) { // 표현 가능 범위 넘었을 때 return false; } return true; } in python? - unsigned 정수에 한해 isdigit() 함수를 사용 가능하다 ("123"은 true, "25kim6"은 false) for _ in range(m): tmp = input() if tmp.isdigit(): print(l[..

BOJ 2023.08.15

[C++] 시간 초과 꿀팁, binary search, 벡터 원소 삭제, set 자료형, map 자료형

main에 최적화를 위한 두 줄 추가하고 시작하면 시간 초과 잘 안 난다 #include using namespace std; int main() { ios::sync_with_stdio(false); cin.tie(NULL); } 벡터 내에 특정 element 있는지 이진 탐색으로 확인하는 방법 - lower_bound를 사용해 삽입될 위치 포인터를 리턴받은다음 v.end() 아니고 해당 주소에 element 있는지 확인하면됨 sort(v.begin(), v.end()); for(int i=0; i> s; vector::iterator it = lower_bound(v.begin(), v.end(), s); if(it != v.end() && *it == s) cnt++; } python bisect...

BOJ 2023.08.15

[C++] vector 정렬/안정정렬, vector 중복요소 제거, pair 자료형

pair 자료형 - utility 헤더 선언 필요, 그런데 및 헤더에 포함되어 있어 별도 선언 필요 x vector v; int N, x, y; cin >> N; while(N--) { cin >> x >> y; v.push_back(make_pair(x,y)); } cf) python이었으면? 배열을 원소로 가지는 배열을 생성하면 되겠지 vector 정렬 - compare 함수를 별도로 정의하여 sorting 기준 명시 - compare 함수 파라미터로 const + &(참조, Referece) 조합 사용 // 상수성, 메모리 절약 bool compare(const pair& p1, const pair& p2) { if(p1.first == p2.first) return p1.second < p2.se..

BOJ 2023.08.11