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++ 문법 정리