본문 바로가기

C++

(69)
소수점 표현하기(반올림) double a = 25.145; cout
dp 연습 탑다운과 바텀업 두가지가 대표적인 풀이이며, 설계를 하고 풀어야 수월함. #include using namespace std; int map[6][3] = { 0, 0, 0, 3, 5, -1, 9, -1, 1, 10, 5, 20, -1, 5, 6, 15, 1, 5 }, cal[6][3], direct[3][2] = {1, -1, 1, 0, 1, 1}; int main() { for(int i=0; i=0; i--) { for(int j=0; j
그리디, Dp 현재 순간에서 좋아보이는 것을 선택하는 것은 그리디이다. 즉, 이전의 값에 상관 없이 무조건 현재 상태에서 최선을 선택한다. dp는 이전 값을 사용하여 현재 값을 구하는 것, 현재값은 미래에 사용 백트래킹은 모든 경우를 다 해보는 것 그리디로 동전 최소 사용횟수 구하는 문제에 적용하려면 동전들이 서로 배수와 약수의 관계여야함 ex) 70, 50, 10의 경우에는 불가능하다. #include using namespace std; int main() { int coin, cnt = 0 ; cin >> coin; int num[4] = {500, 100, 50, 10}; for(int i=0; i> e; if(arr[e] < s) arr[e] = s; } for(int i=0; i maxNum) { cnt[i..
vector의 크기 측정 : size 메서드 size 메서드 사용 시 주의할 점이 있다. size()는 음수와의 비교는 불가능 하다. size_t 는 unsigned int이기에 음수와 비교시 0이 나온다. 이것과 비슷하게 string 클래스의 length()도 마찬가지로 음수와 비교시 0이 나온다. 따라서 같은 int 형 자료형으로 변경해주면 큰 문제 없이 수행됩니다. 물론 이 경우에도 int 형 변수보다 더 큰 숫자가 올 경우 문제가 생길 수 있다.
STL queue, vector 연습 queue 익숙해지기 #include #include using namespace std; queue arr; int main() { arr.push(3); arr.push(6); arr.push(1); arr.push(9); arr.push(7); arr.push(7); while(arr.size() > 1) { int temp = arr.front(); arr.pop(); temp *= arr.front(); temp %= 11; arr.pop(); arr.push(temp); } cout
간단한 그래프에서 싸이클 체크, queue STL used배열로 싸이클을 막을 수 있다. 초기 출발지를 입력받는다면 첫 인덱스에 해당 값을 저장하고 시작 #include #include using namespace std; int used[4]; vector map(4); void dfs(int now) { cout
Vector로 그래프 관계 표현 인접 행렬로 표현하기 어렵고 복잡하기에 인접리스트 형태인 vector를 사용하여 표현하면 편하다. 또한, 실제 값만 연결되어 있기에 조금 더 빠르다. 그러나 둘중 하나가 익숙하지 않다면 익숙하지 않은 것으로 사용하여 익히는 것이 좋은 것 같다. #include #include using namespace std; vector map; int num[4] = {6, 3, 7, 6}; int main() { int n; cin >> n; for(int i=0; i
vector 이것 저것 사용, 그래프 Ctrl F5 눌러서 오류가 나면, F5 누르고 무시를 누르면 더욱 자세히 이유를 알 수 있음. STL에서 반복문 사용할 때 auto로 주로 함. #include #include #include using namespace std; struct Node { int a, b; }; int main() { vector a; a.push_back({7,5}); a.push_back({3,4}); for(auto i = a.begin(); i
string 클래스 find, length, substr find 메서드 str.find(a, b) b 인덱스부터 a 문자열이 어디 인덱스에 있는지 리턴함. 만일 찾지 못한다면 -1 리턴 #include #include using namespace std; int main() { string a = "asdsdasdsadaskfc"; cout 가능 // 그러나 문자열 + 문자열은 불가능 하다. 왜냐하면 문자열을 char*로 인식하기 때문 따라서 형 변환을 통해 string으로 바꿔주면 가능하다. 파싱을 하는 이유: 로그 데이터에서 원하는 데이터만 뽑아 그래프를 그리고 싶음 사람들의 이력, 로그로 원하는 데이터 가져오기 ps보다는 현업에서 많이 사용됨. find + substr로 파싱을 함. substr(a, b) a인덱스부터 b개를 뽑아내겠다. #include..
재귀, 배열 원상복귀, 미로 - 백트래킹으로 풀기 1. 가지 치기 맵 벗어나거나, 이미 갔던 길이나, 벽에 막히면 안감 bfs와 dfs 차이 가는 방법의 수를 구하라는 다 해보는 방법임. 뭘 해도 상관없음. 그러나 최단 경로는 bfs하는 것이 빠름. dfs에서 모든 지점 방문 - used 지우지 않음 모든 경로 탐색 - used 지움 길이 존재하는지 아닌지만 알고싶다면, used = 0; 코드를 삽입하지 않으면 됨. 재귀의 경우 원상복구의 개념을 잘 알아야함.