월 15,400원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
예외처리를 안해도 괜찮은가요?
PDF 문제에는 3<=M<N<=1000 이러한 조건이 있는데 이부분에 대한 예외처리를 따로 해주지않아도 괜찮은가요? 채점의 결과와 상관없이 기업 코딩테스트에서 이러한 부분도 신경쓰지않을까 싶어 질문드립니다.
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
채점시 5문제 모두 Time_Limit_Exceeded가 발생합니다
선생님과 유사하게 코드를 작성하였는데 체점시 5문제 모두 Time_Limit_Exceeded가 발생합니다 어디가 문제가 있을까요? int main(){ //freopen("input.txt", "rt", stdin); int a[10], b[10], a_num = 0, b_num = 0, a_win = 0, i; for(i=0; i<10; i++) scanf("%d ", &a[i]); for(i=0; i<10; i++) scanf("%d ", &b[i]); for(i=0; i<10; i++) { if(a[i] > b[i]) { a_num += 3; a_win = 1; } else if(a[i] < b[i]) { b_num += 3; a_win = 2; } else { a_num++; b_num++; } } printf("%d %d\n", a_num, b_num); if(a_num > b_num) { printf("A\n"); } else if(a_num < b_num) { printf("B\n"); } else { if(a_win == 1) printf("A\n"); else if(a_win == 2) printf("B\n"); else printf("D\n"); } return 0;}
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
저의 풀이 방식에 대한 질문
#include<iostream>#include<stdio.h>#include<vector>#include<algorithm> using namespace std;/* 알고리즘 (point: 1~n까지 순서대로 값을 찾아주기 때문에, 자기보다 큰 값을 고려할 필요가 없음) 1)필요한 변수 - 사용자의 입력을 받을 크기 n의 배열(inversion sequence 담김) -> num 배열 - inversion sequence를 토대로 1~n까지 수를 넣어줄 배열 -> a배열 2)cnt를 -1부터 시작해서, 0의 개수를 세준다. -> 개수와 inversion sequence의 값이 같아질 경우, 그 자리부터 끝 자리중 제일 처음 비어있는 공간에 삽입해준다.*/ int main() { int n, cnt, pos, input = 1, k; //pos : cnt값과 0의 개수가 동일해 질 때 위치를 가리키는 함수 scanf("%d", &n); vector<int> a(n); vector<int> num(n); for(int i = 0; i<n; i++){ scanf("%d", &num[i]); } for(int i = 0; i<n; i++){ pos = num[i]; //1~n의 위치를 나타내는 num값을 pos로 지정해주고 cnt = -1; //cnt를 -1부터 시작함 for(int j = 0; j<n; j++){ if(a[j] == 0) //0일 경우(비어있을 경우) cnt 증가 cnt++; if(cnt == pos){ //cnt가 pos와 같아질 경우, for(k = j; k<n; k++){ //그 자리에 이미 값이 있을 수도 있기 때문에 끝까지 검사해서 if(a[k] == 0){ //가장 앞에 있는 0에 input값(1~n)을 삽입해줌 a[k] = input; input++; break; //반복문 나오고 } } if(a[k] != 0) break; //값을 넣어주었으면 반복문을 빠져나와 다음 input값을 넣어주어야 함 } } } for(int i = 0; i<n; i++){ printf("%d ", a[i]); } return 0; } 안녕하세요, 수업 정말 잘 듣고 있습니다. 저는 작은 수부터 차례대로 처리하였는데, 0의 개수를 세는 방식으로 처리하였습니다. 선생님의 방식과 너무 다른 풀이라 이런식으로 생각하는 방식이 괜찮은 것인지 여쭤보고 싶습니다. 감사합니다 !!
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
저는 큐를 사용하지 않았는데요, 반드시 큐를 사용해야만 풀 수 있는 문제들이 있을까요?
안녕하세요 이중 for문으로 모든 맵의 좌표를 돌면서 1을 발견하면 0으로 만들고 cnt++ 그 좌표에서 인접한 모든 좌표(dx, dy 이용)에서 1을 찾고, 1을 찾으면 위 반복하는 형식으로 찾아낸 1과 연결된 모든 1을 0으로 만드는 식으로 재귀해서(DFS 풀 때 처럼) 풀었는데요, 이 문제를 처음 봤을 때는 큐와 BFS를 사용해야겠다는 생각이 안 떠올랐는데, 혹시 큐와 BFS를 사용해야만 수월하게 풀 수 있는 문제가 있을까요?
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
문제에서 출력예제 공백(?) 신경 안쓰는게 맞나요?
안녕하세요, 좋은 강의 감사합니다. 질문을 나중에 몰아서 할까 하다가 질문을 남깁니다. 코딩테스트와 관련된 질문인데요. 문제파일에서 2.자연수의 합 출력 예시를 보면 '3 +4 +5 +6 +7 = 25' 인 것 처럼 보이는데 '3+4+5+6+7=25'로 답을 작성하고 채점을 하니 잘 넘어가네요. 출력설명에 따로 공백에 대한 내용이 없으면 코딩테스트에서는 무시하는게 기본인가요? 이러한 테스트가 익숙하지 않아 생긴 질문입니다... 감사합니다.
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
메모이제이션 관련 질문있습니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 1:1 문의하기를 이용해주세요. 안녕하세요 강사님 좋은 강의 감사드립니다. 한 가지 이해가 되지 않는 부분이 있어 질문드리려고 합니다. 트리를 일일이 뻗지 않게 하려고 메모이제이션을 쓴다고 뒷부분에서 말씀하셨는데, 26분 13초에 그림을 보니 unf[v] = Find(unf[v])를 하는 것 자체가 계속 가지가 뻗는 것처럼 보입니다. 그냥 가지를 뻗는 것과, 메모이제이션이 똑같다는 느낌을 받는데, 혹시 차이가 정확히 어떤 것인지 궁금합니다.
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
출력이 마이너스로 나와여
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중나이계산문제인데 왜 출력이 마이너스가 나올까여??ㅠㅠㅠ배열이 잘못들어가는거같은데,,
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
트리의 특성을 활용해서 이런 방식으로 풀이를 해보았습니다.
#include <iostream> #include <vector> using namespace std; int n = 0, ch[11], l[11]; vector<int> v; void DFS(int L) { if (L == n + 1) { int sum = 0; for (int i = 1; i <= n; i++) { if (ch[i] == 1) { sum += l[i]; } } v.push_back(sum); } else { ch[L] = 1; DFS(L + 1); ch[L] = 0; DFS(L + 1); } } int main() { //FILE* fp = nullptr; //freopen_s(&fp, "input.txt", "rt", stdin); cin >> n; for (int i = 1; i <= n; i++) { cin >> l[i]; } v.push_back(0); DFS(1); int s = v.size(); for (int i = 1; i <= s/2; i++) { int l = v[i]; int r = v[s - i]; if (l == r) { cout << "YES"; return 0; } } cout << "NO"; return 0; } 트리의 정가운데를 기준으로 나눠서 생각해보면 반대편에 있는 값이 서로 겹치지 않는 값이더라구요. 위 특성을 활용하면 이런 풀이도 가능한 것 같습니다.
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
안녕하세요 선생님 중복
안녕하세요 선생님 질문있습니다. 2 * a[p2] == 6 3 * a[p3] == 6 5 * a[p5] == 10 인 경우 a배열에 6이 두번 포함되게 되는거 아닌가요?
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
문법 이해가 더 어렵네요...
알고리즘보다 구조체로 로직을 이해하려니 더 어렵네요ㅠ 이해가 전혀 안됩니다...
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
now 증가
안녕하세요. now 하나씩 증가하는 구조가 이해가 안됩니다. 입력 값을 배열에 저장해놓고 증가하는 형식이 아닌거같은데 now가 1씩 증가하는 코드가 어느 것인지 알 수 있을까요?
- 해결됨it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
연산자 오버로딩을 하면
안녕하세요구조체 내에 연산자 오버로딩을 하면 Sort함수에 쓰이는 원리가 궁금합니다.참조형 매개변수로 B를 받고A > B 이렇게하면 현재값이 앞에 놓이니깐 내림차순으로 정렬된다는게 어떤의미인지 이해가 잘 안됩니다 ㅠㅠ #include<stdio.h> #include<algorithm> #include<queue> #include<vector> using namespace std; struct Data{ int money; int when; Data(int a, int b){ money=a; when=b; } bool operator<(const Data &b)const{ return when>b.when; } }; int main(){ freopen("input.txt", "rt", stdin); int n, i, j, a, b, res=0, max=-2147000000; vector<Data> T; priority_queue<int> pQ; scanf("%d", &n); for(i=1; i<=n; i++){ scanf("%d %d", &a, &b); T.push_back(Data(a, b)); if(b>max) max=b; } sort(T.begin(), T.end()); j=0; for(i=max; i>=1; i--){ for( ; j<n; j++){ if(T[j].when<i) break; pQ.push(T[j].money); } if(!pQ.empty()){ res+=pQ.top(); pQ.pop(); } } printf("%d\n",res); return 0; }
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
코드에서 cnt의 역하
main함수 초반에 int형 변수를 선언하시면서 cnt를 0으로 초기화하신 이유가 있을까요? cnt는 쓰인것같지가 않아서 질문드립니다.
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
난이도 질문
안녕하세요. 이 강의들 모두 수강해서 소화하면 백준 실버 ~ 골드 하위 문제는 충분히 풀 수 있는정도의 실력이 될까요?
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
이 방법은 시간복잡도가 On2 정도일까요?
int main() { freopen("input.txt", "rt", stdin); int n; scanf("%d", &n); std::vector<int> list; int sum = 0; int count = 0; for (int i = (n/2) + 1; i > 0; i--) { int temp = i; sum = 0; list.clear(); while (true) { sum += temp; list.push_back(temp); temp--; if (sum == n) { for (int k = list.size() - 1; k > 0; k--) { printf("%d + ", list[k]); } printf("%d = %d\n", list[0], sum); count++; break; } else if (sum > n) { break; } } } printf("%d", count); return 0; } 반복문이 3번 등장해서 좋지 못하다고 생각듭니다. 시간복잡도가 On2 이상 일까요?
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
반복문 한번으로 끝낼 수 있을 땐 한번만 사용하는 것이 좋을까요?
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <vector> #include <algorithm> int main() { freopen("input.txt", "rt", stdin); int n; int nList[101] = { 0, }; scanf("%d", &n); for (auto i = 0; i < n; i++) { scanf("%d", &nList[i]); } int m; int mList[101] = { 0, }; scanf("%d", &m); for (auto i = 0; i < m; i++) { scanf("%d", &mList[i]); } int results[201] = { 0, }; int p1 = 0, p2 = 0, p3 = 0; while(nList[p1] != 0 || mList[p2] != 0) { if (nList[p1] > mList[p2] && (nList[p1] != 0 && mList[p2])) { results[p3] = mList[p2]; p2++; } else if (nList[p1] < mList[p2] && (nList[p1] != 0 && mList[p2])) { results[p3] = nList[p1]; p1++; } else { int temp = 0; if (nList[p1] != 0) { temp = nList[p1]; results[p3] = temp; p1++; } else { temp = mList[p2]; results[p3] = temp; p2++; } } p3++; } for (auto i = 0; results[i] != 0; i++) { printf("%d ", results[i]); } return 0; } 안녕하세요 강사님. 반복문을 한번으로 끝낼 수 있는 문제는 한번만 사용하는 것이 좋을까요? 대신 조건문이 좀 더 많아지는데 반복문을 줄이는게 다른 알고리즘에서도 더 효과적인지 궁금합니다.
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
배열의 처음부터 접근해도 괜찮을까요?
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <vector> #include <algorithm> int main() { freopen("input.txt", "rt", stdin); int cacheSize, tasks; scanf("%d %d", &cacheSize, &tasks); std::vector<int> cacheList(cacheSize, 0); int i = 0; for (int task = 0; task < tasks; task++) { if (i != cacheSize-1) { i++; } int k; int input; int pos = 0; scanf("%d", &input); // Hit 위치를 찾아낸다. for (k = 0; k <= i; k++) { if (cacheList[k] == input) { pos = k; } } // Hit가 없으면 if (pos == 0) { for (k = i - 1; k >= 0; k--) { cacheList[k + 1] = cacheList[k]; } } else { for (k = pos - 1; k >= 0; k--) { cacheList[k + 1] = cacheList[k]; } } cacheList[k + 1] = input; } for (int i = 0; i < cacheSize; i++) { printf("%d ", cacheList[i]); } return 0; } 반복횟수를 줄여보고자 첫 인덱스부터 접근했보았습니다. 괜찮은 코드일까요?
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
채점기 질문있습니다.
안녕하세요 강사님 채점기에 대한 질문있습니다. 현재 윈도우11 에서 과정을 진행중에 있습니다. 채점기가 실행은 되는데 전부 wrong_answer이 뜹니다. 혹시나 싶어 dev c++, visual studio 둘 다 빌드 해봤지만 상황은 같습니다. 폴더에 있는 정답 소스코드를 붙여 넣어도 전부 wrong_answer라고 떠서 윈도우 11에선 작동하지 않는건가 궁금합니다.
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
강의 수강 전에 풀어보는 것에 대해서
58번에서 배운 전위순회 개념만을 이용해서 59번 풀려고하니 이틀동안 고민하다 답이 안보여서 강의를 봤는데 트리의 레벨이라는 개념이 나오더라구요. 그래서 채점폴더가 없는 문제들은 새로운 개념을 익히는 용도로만 봐야하나 생각했습니다. 58번과 59번처럼 채점폴더가 없는 문제들은 문제를 푸는 과정을 거치지않고 그냥 편하게 쭉 들어봐도 되는걸까요? 지식이 없는 상태에서 푸는게 너무 어렵네요.
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
맞왜틀
빨간 세로선 기준으로 왼쪽이 제가 입력한 코드의 결과이고 오른쪽이 강사님의 코드의 결과입니다. 채점을 할 때 강사님꺼는 Success가 뜨는데 제꺼는 Wrong_answer가 뜨네요 ㅠ 뭐가 문제일까요. #define _CRT_SECURE_NO_WARNINGS #include <iostream> #include <string> #include <algorithm> #include <vector> #include <stack> using namespace std; int main(int argc, char** argv) { //freopen("input.txt", "rt", stdin); int n, i = 1, j = 0, start, count = 0; scanf("%d", &n); stack<int> s; char* a = new char[n * 2]; while (count < n) { scanf("%d", &start); s.push(start); a[j++] = 'P'; while (!s.empty() && s.top() == i) { s.pop(); a[j++] = 'O'; i++; } count++; } if (s.empty()) { for (i = 0; i < j; i++) printf("%c", a[i]); } else printf("impossible\n"); delete[] a; }