백준, BOJ, 6603번, 로또 C++ [CPP] ★★ 쉬운 문제다. 백트래킹의 전형적인 형태를 보여준다. https://www.acmicpc.net/problem/6603 #맞은 풀이 #include using namespace std; vector vec; //6개 뽑으면 종료 => 조건 사전순, 조합, 현재까지 뽑은 결과 void func(int cnt, vector result, int cur){ if(cnt == 6){ for(auto c : result){ cout 문제풀이(Problem Solving) 2022.06.14
백준, BOJ, 2529번, 부등호 C++ [CPP] ★★ 전형적인 BruteForce다. 다만. 10자리라는 숫자는 큰 숫자이기에 나같은 범위를 착각하는 실수를 하지 않기를 바란다. https://www.acmicpc.net/problem/2529 #맞은 풀이 #include using namespace std; int k; vector vec; long long maxN = -9999999999; //범위 조심 string MM; long long minN = 9999999999; //범위 조심 string mm; bool check[10]; bool IsValid(int a, int b, int seq){ if(vec[seq] == '>'){ return a > b; }else{ return a < b; } } void func(int cnt, string.. 문제풀이(Problem Solving) 2022.06.13
백준, BOJ, 14226번, 이모티콘 C++ [CPP] ★★★ 어렵지 않았다. 다만 어떻게 풀지? 가 관건이다. https://www.acmicpc.net/problem/14226 문제 분석부터 해보자 최솟값을 가지는데 수행해야 하는 작업의 가중치가 같다? BFS 가자 #include using namespace std; //1개는 이미 입력 int S; int visited[3000][3000]; int main(){ cin >> S; //현재 상태, 클립보드에 저장된 개수 queue q; q.push({1,0}); visited[1][0] = 1; while(!q.empty()){ auto cur = q.front(); q.pop(); int now = cur.first; int clip = cur.second; //체크 if(now == S){ cout 문제풀이(Problem Solving) 2022.06.04
알고리즘 문제풀이 - 수학 자주 나오는 개념 총정리 많은 수학 문제들이 있지만 가장 자주 나오는 문제부터 살펴보고 나머지는 교양으로 알아보자 나머지 나머지는 특히 답에 xxx로 나눈 나머지를 구하시오와 같은 문제로 많이 나오는데 이건 범위를 제한하기 위해서다. 즉, 기본 자료형의 범위를 초과한다고 생각하면 이런 문제가 나온다. 나머지에는 특징이 있는데 덧셈, 곱셈, 뺄셈은 이 법칙이 적용이 되고 나눗셈은 안된다. 1. 합을 나눈 것은 각자의 나머지의 합의 나머지를 구하는 것과 같다 2. 곱을 나눈 것은 각자의 나머지를 곱해서 나머지를 구하는 것과 같다. 3. 뺄셈을 나눈 것은 각자의 나머지를 뺀 것의 나머지를 구하는 것과 같다. **다만 뺄셈은 음수가 나올 수 있기 때문에 M을 한 번 더해준다. 마치 분배법칙을 이용한 것과 같다. 하지만 조금 다르다. 분.. 문제풀이(Problem Solving)/C++ 문제풀이에 유용한 것들 2022.05.18
Effective Modern C++, 항목 7 : 객체 생성시 괄호와 중괄호 구분하기 C++ 11부터 객체 생성 구문이 아주 다양해졌다. 그래서 우리는 이 항목을 배우는 것이다. 일반적으로 C++11 에서는 초기화 값을 3가지 형태로 지정할 수 있다. 1. 괄호 2. 등호 3. 중괄호 int x(0); int y = 0; int z { 0 }; 사실 하나 더 있다. 등호와 중괄호를 함께 사용하는 경우다. int z = { 0 }; **위 코드는 대체로 중괄호를 단독으로 사용한 것과 동일하게 취급되어 작동한다. 위처럼 기본 타입이 아니라 사용자 정의 형식에서는 위처럼 간단하게 초기화되거나 assign이 일어나지는 않는다. 예를 들면 Widget w1; //기본 생성자 Widget w2 = w1; //복사 생성자 => w1을 w2에 대입하는 것이 아님 w1 = w2; // 이건 복사 대입 연.. 프로그래밍 지식/Effective Modern C++ 2022.05.16
알고리즘 문제풀이 - 스택, Stack 총정리 사실 스택을 이용하는 문제는 수없이 많다. 글 하나로 정리를 할 수 없다는 것은 안다. 하지만 스택이 가리키는 것은 단 하나 밖에 없고 그 개념을 조금이라도 감을 잡고자 글을 쓴다. 실전 개념 1. 스택은 한쪽 끝에서만 자료를 넣고 뺄 수 있다. 2. Push, Pop은 O(1)의 시간복잡도를 가진다. 3. Stack에 최근에 들어간 것만 뺄 수 있다. => 가장 마지막에 들어간 것만 뺄 수 있다. 확장 3. 연속된 원소를 집어넣으면 뺄 때는 역순으로 나온다. 문제를 풀면서 저 1,2,3번의 개념이 어디에 들어가나 보자 1. 단어 뒤집기 사실 어려운 문제다. https://www.acmicpc.net/problem/9093 #include using namespace std; int n; int main.. 문제풀이(Problem Solving)/C++ 문제풀이에 유용한 것들 2022.05.15
Effective Modern C++ 값의 종류 이번에 Effective Modern C++ 책을 오직 나의 만족을 위해서 공부해보기로 하였다. 근데 뭐 읽는다고 내가 개발 실력이 급격하게 늘 것 같지는 않고 그냥 후두러 까보자. 까다보면 잘해지겠지.. 시작해보자 C++에서는 코드를 써놓은 것을 표현식(expression)말하는데 자주 쓰는 용어이니 기억하자. 아무튼 표현식은 2가지를 가진다. 1.Type (자료형) 2. value category(값의 종류) ?? 엥 종류가 타입 아니냐??? 물론 비슷하지만 다르다. 책에서도 다르게 분류하는데 타입: int, int*, string, const int&, int[], ... 등 우리가 평소에 알고 있는 타입 그대로다. 값의 종류: lvalue, prvalue, xvalue, rvalue, glvalu.. 프로그래밍 지식/Effective Modern C++ 2022.05.14
프로그래머스 카카오, 괄호 변환 C++ [CPP] ★★★ 문자열 처리에 애를 먹었다. 조건이 정말 까다로웠다. 난 그랬다. https://programmers.co.kr/learn/courses/30/lessons/60058 #맞는 풀이 #include using namespace std; //나눌 수 없는 균형잡힌 문자열 => position //그것이 올바른지 아닌지 return bool IsCorrect(string str, int* pos){ bool isCorrect = true; int open = 0; int close = 0; stack stk; for(int i = 0; i 해당 위치를 찾았으니 종료 if(open == close){ *pos = i + 1; return isCorrect; } } return true; } string solu.. 문제풀이(Problem Solving) 2022.05.11
프로그래머스 카카오, 메뉴 리뉴얼 C++ [CPP] ★★★★★ MAP을 쓰는 정말 좋은 문제가 아닐까 싶다. 처음 생각하기는 어렵다. 하지만.. 알고 나면 너무나 쉽다. https://programmers.co.kr/learn/courses/30/lessons/72411 #맞은 풀이 #include using namespace std; //orders 배열의 각 원소는 크기가 2 이상 10 이하인 문자열 => 음식을 10개 초과로 시킬 수 없음 unordered_map combination[11]; // "음식이름", "횟수" //index는 음식의 수를 말함 combination[3] => 3가지로 만들 수 있는 조합 int mxCount[11]; //해당 조합 중에서 가장 많이 중복된 값 void comb(string str, int cnt, string res.. 문제풀이(Problem Solving) 2022.05.08
프로그래머스 카카오, 신규 아이디 추천 C++ [CPP] ★★★★ 문자열 처리의 정말 정석이 아닐까 싶다. https://programmers.co.kr/learn/courses/30/lessons/72410?language=cpp #맞은 풀이 #include using namespace std; bool IsValidChar(char c){ if(isalnum(c))return true; if(c == '-' || c == '_' || c == '.')return true; return false; } string solution(string new_id) { string answer = ""; //모든 문자열을 뒤짐. for(auto c : new_id){ if(!IsValidChar(c))continue; //조건 2 c = tolower(c); //조건 1 //.. 문제풀이(Problem Solving) 2022.05.08