전체 보기

코테에서 자주 쓰는 C++ 문법 정리

작성일자
2023/04/14
태그
PS
프로젝트
책 종류
1 more property

PS

PS에서 자주 쓰는 C++ 문법 정리

#include <bits/stdc++.h>
Vector
vector<int> v = { 1, 1, 1 }; // 3개 원소를 1로 초기화 fill(v.begin(),v.end(),-1); // 3개 원소를 -1로 초기화 vector<int> vvv(3); // 3개 원소를 0으로 초기화 vector<int> sv(v.begin()+1, v.begin+3); // [1:2] 슬라이싱 v.push_back(3); // 3 붙이기 v.size(); // 길이 v.empty(); // empty 여부 v.erase(unique(v.begin(), v.end()), v.end()); sort(v.begin(), v.end()); // 정렬 vector<int> slice(array.begin() + start - 1, array.begin() + end); int big = *max_element(v.begin(),v.end()); // 가장 큰 원소의 값 저장
C++
복사
String
string s; s.append(s2); // 붙이기 s.size(); // 길이 s.length(); // 길이 s.empty(); // empty 여부 s.replace(n, k, str2) // n번째 index부터 k개의 문자를 str2로 대체함 s.clear(); // 저장된 문자열을 모두 지움 s.erase(n, m) // n번째 index부터 m개의 문자를 지움 s.find("abcd") // "abcd"가 str에 포함되어있는지를 확인. 찾으면 그 첫번째 index를 반환 sort(s.begin(),s.end()); // 정렬
C++
복사
Array
int a[3] = { 1, 1, 1 }; // 3개 원소를 1로 초기화 fill_n(a, 3, -1); // 3개 원소를 -1로 초기화 sizeof(a); // 길이 sort(a, a+10); // 정렬
C++
복사
Queue / Stack
#include <queue> queue<int> q; // 사용 예) s.push(), s.pop(), s.front(), s.back(), s.empty()
C++
복사
기타
// string to int string str = "12345"; int num = std::stoi(str); // int... to string int num = 10; string str = to_string(num); // 최대,최소 int biggest = max(c,max(a, b));
C++
복사
순열
string numbers = "101"; numbers.length(); // 문자열 길이 sort(numbers.begin(),numbers.end()); // 문자열 정렬 -> "011" do { for(int i=0; i<numbers.length(); i++) { cout << numbers[i] << ' '; } cout << endl; } while(next_permutation(numbers.begin(),numbers.end())); /* 0 1 1 1 0 1 1 1 0 */
C++
복사
정렬
struct member { string name; int age, index; }; bool compare(const member& a, const member& b) { if (a.age != b.age) // 나이가 다르면 나이 순으로 정열 return a.age < b.age; else // 나이가 같으면 가입한 순으로 정열 return a.index < b.index; }
C++
복사
에라토스테네스의 체
bool sosu(int num) { if (num < 2) return false; int a = (int) sqrt(num); for (int i = 2; i <= a; i++) if (num % i == 0) return false; return true; }
C++
복사
참고

문제 풀이

프로그래머스 - 부족한 금액
Try 1 → 성공
#include <bits/stdc++.h> using namespace std; /* [문제 설명] - 처음 이용료 : price원 - N번째 이용료 : price * N원 - count번 탔을 때 현재 갖고 있는 금액에서 얼마가 모자라는지 return - 금액 안모자라면 0 return [문제 접근] - 반복문 혹은 가우스 공식 사용 - 조건연산자 사용 -> (조건식) ? 표현식1 : 표현식2; */ long long solution(int price, int money, int count) { long long answer = -1; long long sum = 0; // sum이 int면 price, count가 최대치일 때 음수 나옴 -> 1000000000-(-774309592)=-1774309592 // sum이 long이어야 제대로 계산됨 -> 1000000000-7815625000=6815625000 for(int i=1; i<=count; i++) { sum += price*i; // cout << price*i << endl; } cout << money << "-" << sum << "=" << (money - sum) * (-1); if(money - sum < 0) answer = (money - sum) * (-1); else answer = 0; return answer; }
JSON
복사
Try 2 → 시간복잡도 개선한 코드 (wity 가우스)
using namespace std; long long solution(int price, int money, int count) { long long sum=1LL*price*(count+1)*count/2; // 1LL 안하면 큰 숫자 계산 못함 return (moneys<sum)?sum-money:0; }
JSON
복사

하루 정리

TIL 작성하기
PS
프로그래머스 - 부족한 금액
C++ 문법 정리