전체 글

웹 프론트엔드 개발자를 꿈꾸고 있습니다 :)
Algorithm/Baekjoon(C++)

[백준] 2798번: 블랙잭 C++로 풀어보기

생각 맨 처음 든 생각: 벡터로 입력받아서 오름차순으로 정렬한 다음, M/3과 가장 가까운 수를 찾아서 그 수와 양 옆에 있는 수를 더한 값을 구하면 될 것 같다. -> 정렬했을 때 붙어있는 세 값의 합만이 정답이 아니다. 반례가 있으므로 틀렸다. 두번째 든 생각: 벡터로 입력받아서 오름차순으로 정렬한 다음, (*it) + *(it+1) + *(it+2)가 m보다 클 때를 찾아서 그 때 *(it-1) + *it + *(it+1)을 구하면 될 것 같다. -> 아까 위에 말했던 것처럼 정렬했을 때 붙어있는 세 값만이 정답이 아니다. 역시 틀렸다. 붙어있는 값들의 합만이 정답이 아니다. 그러면 어떻게 해야될까? -> 삼중루프를 돌려서 m과 가장 가깝지만 m보다 작은 값을 찾는다. 여기서 주의해야 할 점은 삼중..

Algorithm/Baekjoon(C++)

[백준] 5430번: AC C++로 풀어보기

생각 이 문제에서 해결해야 될 문제는 크게 두 가지다. 1. [숫자,숫자,숫자...]를 입력받고 어떻게 숫자만 쏙 빼서 덱에 넣을까? 2. 뒤집는 것과 지우는 것을 어떻게 구현하면 될까? 처음에는 1번 문제를 어떻게 풀었냐면, 1. string으로 배열을 입력받는다. 2. '[', ',' ']'가 아니면 숫자로 바꿔서 덱에 push한다. 하지만 이렇게 하면 문제가 있다. 만약 두 자리 수의 숫자가 들어왔을 경우에도 숫자를 따로따로 인식하게 되기 때문이다. 그래서 어떻게 풀었냐면, 1. string으로 배열을 입력받는다. 2. ',', ']'가 아니면 또 다른 string 변수에 더해준다. 3. 만약 ',' 나 ']'이 나오면 string 변수를 stoi로 int로 바꿔주고 덱에 push한다. 4. str..

Algorithm/Baekjoon(C++)

[백준] 3986번: 좋은 단어 C++로 풀어보기

어떻게 풀까? (문제를 처음 보고 든 생각) 스택을 사용하자. for문을 써서 현재 for문이 가리키는 알파벳이 스택의 top에 있는 알파벳과 같다면 pop을 하자. for문 loop가 다 끝나고 스택이 비어있으면 좋은 단어고, 아니면 좋은 단어가 아니다. 코드 #include using namespace std; int main() { ios::sync_with_stdio(0); cin.tie(0); int n; // 단어 수 int cnt = 0; // 좋은 단어 개수 cin >> n; while (n--) { stack s; string a; cin >> a; for (int i = 0; i < a.length(); i++) { if (s.empty()) { // 스택이 비어있다면 s.push(a[..

Algorithm/Baekjoon(C++)

[백준] 2164번: 카드2 C++로 풀어보기

어떻게 풀까? (문제를 보고 처음 든 생각) 큐를 사용해서 풀면 될 것 같다. 먼저 큐의 front를 한 번 pop하고, 그리고 임시 변수에 갱신된 큐의 front를 저장하고, 큐의 front를 다시 pop한다. 그리고 임시 변수를 큐에 push한다.(위에 있던 수를 밑으로 옮기는 효과) 코드 #include using namespace std; int main() { ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); queue q; int n; int temp = 0; cin >> n; for (int i = 1; i n; for (int i = 1; i

Algorithm/Baekjoon(C++)

[백준] 1874번: 스택 수열 C++로 풀어보기

어떻게 풀까? (문제를 풀고 처음 든생각) 문제를 다시 읽어봐도 예제 입력값이 어떻게 예제 출력값을 유도하는 지 이해가 가지 않았다. 그래서 천천히 단계별로 생각해 보기로 했다. 배열 : 4 3 6 8 7 5 2 1 지금 배열은 4를 가리키고 있다. 4를 처리하면 다음 배열값으로 넘어간다. 1. stack | vector 1 2. stack | vector 2 1 3. stack | vector 3 2 1 4. stack | vector *it) { // top이 현재 수열이 가리키는 값보다 크다면 cout

Algorithm/Baekjoon(C++)

[백준] 5397번: 키로거 C++로 풀어보기

어떻게 풀까? (문제를 보고 처음 든 생각) 연결 리스트로 풀면 될 것 같다. STL list를 활용하자. ※ STL list 사용법: https://losskatsu.github.io/programming/c-stl-list/#2-%EB%A6%AC%EC%8A%A4%ED%8A%B8-%EC%82%AC%EC%9A%A9%EC%98%88 [C언어] C++ STL 리스트(list) 사용법 정리 C++ STL 리스트(list) 사용법 정리 losskatsu.github.io string 배열에 문자열을 입력을 받고 ''일 때는 iter를 하나 추가하고(a.end()가 아닐 때) '-'일 때는 erase를 사용하면 될 것 같다.(a.begin()이 아닐 때 코드 #include using namespace std; ..

Algorithm/Baekjoon(C++)

[백준] 1919번: 애너그램 만들기 C++로 풀어보기

어떻게 풀까? (문제를 풀고 처음 든 생각) 1. 일단 단어 두 개를 입력받고 각각 벡터에 넣는다. 2. 첫번째 벡터의 알파벳을 두번째 배열의 알파벳이 겹치는 것이 있는지 루프를 돌린다.(이중루프 이용) 3. 찾으면 첫번째 벡터과 두번째 벡터에서 그 알파벳을 뺀다. 4. 그리고 계속 루프를 돌린다. 5. 루프가 다 끝나면 첫번째 벡터, 두번째 벡터에서 남은 알파벳 개수를 더한다. 코드 #include using namespace std; int main() { ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); vector v1; vector v2; string word1; string word2; int cnt = 0; // 단어 두 개 입력 cin >> word1..

Algorithm/Baekjoon(C++)

[백준] 2609번: 최대공약수와 최소공배수 C++로 풀어보기

어떻게 풀까? (문제를 풀고 처음 든 생각) 최대공약수와 최소공배수라는 단어를 진짜 오랜만에 듣는다. 어떻게 구하는지도 기억이 가물가물하다. 소인수분해를 해서 나온 소인수들을 벡터에 저장하고, 최대공약수는 벡터에 저장해놓은 소인수들을 곱한 값으로, 최대공배수는 최대공약수에 소인수들로 나눠진 두 수를 곱해서 구하면 될 것 같다. 코드 #include using namespace std; int main() { int a, b; vector v; int max, min; int cnt = 1; cin >> a >> b; int x = 2; while (1) { if (a % x == 0 && b % x == 0) { // 공약수를 찾았으면 a = a / x; b = b / x; v.push_back(x); ..

Algorithm/Baekjoon(C++)

[백준] 27866번: 문자와 문자열 C++로 풀어보기

어떻게 풀까? (문제를 보고 처음 든 생각) string은 한 글자씩 접근이 가능하다.(단, 시작은 0이다.) 단어 S와 숫자 i를 입력받고, 단어에서 i-1번째 글자를 출력해주면 될 것 같다. 코드 #include using namespace std; int main() { string s; int i = 0; cin >> s; cin >> i; cout

퀵차분
QC's Devlog