월 15,400원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 해결됨it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
마지막에서 시간 초과 나오는 이유는 뭘까요?
시간초과가 나오지 않게 하려고 시간복잡도 N^2를 피했는데 마지막에서 시간초과가 나요 왜그럴까요 if에서 배열++하는 작업이 시간이 많이 드는 건가요? #include <iostream> #include <algorithm> #include <string> #include <vector> #include <queue> using namespace std; int check[30001]; int main() { int N, M; cin >> N; for (int i = 0; i < N; i++) { int x; cin >> x; check[x]++; } cin >> M; vector<int> arr; for (int i = 0; i < M; i++) { int x; cin >> x; if (check[x] > 0) { arr.push_back(x); check[x]--; } } sort(arr.begin(), arr.end()); for (int i = 0; i < arr.size(); i++) { cout << arr[i] << " "; } return 0; }
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
39번 두 배열 합치기에서
선생님, 안녕하세요? 저는 선생님께서 코드를 ㅈ작성하시기 이전에 제가 코드를 먼저 ㅈ작성하는 편인데요 강의 중에 포인터? 포인트??? 를 언급하시길래 아 포인터를 사용해야하나 보다 싶어서 포인터를 써서 ㅈ작성을 해봤습니다. 그랬더니 코드는 다음과 같은데요 원래 index1 index2 index3 이거 없이 그냥 a, b, c(c는 a,b각각을 합친 배열)에 대한 포인터를 각각 p1 p2, p3로 잡고 조건에 따라 p1++ p2++ 이렇게 포인터를 증가시키면서 코드를 작성하려 하였더니 합쳐진 p3에서 엑세스 위반이 일어난다고 합니다. 그래서 index1 index2 index3를 각각 0으로 놓고 궁여지책으로라도 코드를 작성해봤는데요 코드는 잘 동작하는 것으로 보입니다. 1) 왜 p1++ p2++할 때에는 액세스 위반이 생기는 건가요? 2) 제 코드에 불필요한 부분이나 부ㅈ족한 부분이 있다면, 가르침을 주시면 감사하겠습니다. #include<stdio.h> #include<stdlib.h> int main() { int* p1, * p2, * p3; int* a, * b, * c; int N, M; int index1 = 0, index2 = 0, index3 = 0; scanf("%d", &N); a = (int*)malloc(sizeof(int) * N); for (int i = 0; i < N; i++) { scanf("%d", &a[i]); } scanf("%d", &M); b = (int*)malloc(sizeof(int) * M); for (int i = 0; i < M; i++) { scanf("%d", &b[i]); } c = (int*)malloc(sizeof(int) * (N + M)); p1 = a, p2 = b, p3 = c; for (int i = 0; i < N; i++) { printf("%d ", *(p1+i)); } for (int i = 0; i < M; i++) { printf("%d ", *(p2+i)); } //if (*p1 < *p2) { *c = *p1; } while (index1 < N && index2 < M) { if (*(p1 + index1) < *(p2 + index2)) { *(p3 + index3) = *(p1 + index1); index3++; index1++; } if (*(p1 + index1) > * (p2 + index2)) { *(p3 + index3) = *(p2 + index2); index3++; index2++; } if(*(p1+index1)==*(p2+index2)){*(p3+index3)=*(p2+index2); index3++; index2++; } } //a배열이 남은 경우 printf("%d %d %d \n", index1, index2, index3); if (index1 == N) { for (int i = index2; i < M; i++) { *(p3 + index3) = *(p2 + i); index3++; } } for (int i = 0; i < index3; i++) { printf("%d", c[i]); } }
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
dev c++ 컴파일 에러
문제를 풀고 f9,f10을 누르면 현재 코드를 작성한대로 나오는게 아니라 이전 코드로 컴파일한 내용이 나옵니다. 컴파일러 설정에서 -static-libgcc를 추가해봐도 해결되지 않습니다.. 이런 경우는 어떻게 해결해야되는지 질문 남깁니다.
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
이차원배열 동적할당
지금 같은문제는 n값이 적어서 배열의 크기가 작지만 배열의 크기를 클때도 대비해서 이차원배열 동적할당하는법을 알아두는게 나중에도움이 될까요?
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
while(scanf("%c", &ch) != -1)
#include <stdio.h> #include <vector> #include <stack> #include <algorithm> using namespace std; int main(int argc, char** argv) { //freopen("input.txt", "rt", stdin); char ch; stack<char> s; while(scanf("%c", &ch) != -1){ if(ch == '(') s.push(ch); else if(ch == ')'){ if(s.empty()){ printf("NO"); return 0; } s.pop(); } } if(s.empty()) printf("YES"); else printf("NO"); return 0; } 테스트케이스 1번, 5번 경우에서 타임 리미트가 발생합니다ㅠㅠ. scanf("%c", &ch) != -1) 이 표현이 잘못된 표현인지 궁금합니다. scanf로 읽는 동시에 처리하는 거랑 배열로 다 읽은 후 처리하는데 차이가 있나요?? 항상 좋은 강의 감사합니다.
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
atoi(), stoi() 함수 In Dev C++
#include <iostream> #include <string> /* run this program using the console pauser or add your own getch, system("pause") or input loop */ using namespace std; int main(void) { string str = "113"; cout << str; cout << atoi(str); cout << stoi(str); return 0; } 이렇게 코드를 작성해서 atoi함수와 stoi함수를 사용해서 문자열을 숫자로 바꿔서 문제를 풀려고 했는데요. atoi, stoi 함수들 모두 검색결과 다른 개발자들은 모두 잘 동작하는 것 같은데요. dev C++ 개발프로그램에서만 동작하지 않는건가요?? 아니면 제가 문법을 틀리게 작성하였나요??
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
recur함수 중에서 질문 있습니다.
안녕하세요. 강의 중 질문이 있어서 글 남겼습니다. void recur(int x){ if(x==0){ return; } else { recur(x-1); printf("%d",x); } } 코드에서 recur(x-1) 대신에 recur(--x)를 넣으면 0부터 x-1까지 출력되는데, 그 이유가 무엇인지 잘 모르겠습니다. 감사합니다.
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
문제 자료
동적계획법 섹션 관련 문제 자료는 어디에서 다운받을 수 있나요?
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
질문있습니다.
int binarySearch(int key,int lt,int rt,vector <int> v) { int mid = (lt + rt) / 2; if (v[mid] == key) { cout<< mid + 1; return mid+1; } else if (key <v[mid]) { binarySearch(key, lt, mid - 1, v); } else { binarySearch(key, mid + 1, rt, v); } } int main() { ios_base::sync_with_stdio(false); //ifstream cin; //cin.open("input.txt"); //if (cin.is_open()) { int n,key; cin >> n>>key; vector<int> v(n); for (int i = 0; i < n;i++) { cin >> v[i]; } sort(v.begin(), v.end()); 이부분 => int value=binarySearch(key, 0, n - 1, v); //} } 저는 재귀함수로 짜봤는데 화살표로ㅗ 표시한 부분에 value값은 0이 출력됩니다 위에 binarySearch라는 함수부분에서 리턴시키기전에 mid+1로 찍으면 3이 잘나오는데 value값은 0이나오는 이유를 모르겠습니다
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
66번 인접리스트할당값질문드립니다
만약 map[2][4] 면 어떤값이 할당되나요? ch[map[v][i]] 를 0과 1로 만들때 ch의 index값이 어떻게잡히는지 궁금합니다
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
26. 마라톤
안녕하세요? 선생님께서 풀어주신 코드로 채점을 해보면 in4,5에서 time limit에 걸린다고 뜹니다. 제가 알기로는 N<=10,000이면 O(n^2)으로도 통과할 수 있다고 알고있는데, 제 컴퓨터 성능이 안좋아서 in4,5에서 시간제한에 걸린건가요?
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
전위순회
안녕하세요. 항상 질이 높은 교수님의 강의덕에 이 부분까지 공부하게된 학생입니다. 제가 알기로는 전위순회는 부모노드->왼쪽노드->오른쪽 노드 순으로 출력을 하는 것으로 알고 있습니다. 처음 문제만 접했을 때는 전위순회에 집착을 해서 고민하다가 풀지를 못했습니다. 교수님 설명을 들으면 맨 아래의 노드들만 출력을 하게 되어 있습니다. 만약, 부모노드는 출력을 하지 않는 형태이며 마지막 노드만 출력되는 형태면 전위,중위,후위 모두 왼쪽 오른쪽 순서로 출력이 되는 것으로 알고 있습니다. 어느 부분을 전위순회로 봐야 할지 알고 있던 부분과 혼동이 되고 있어 질문드립니다.
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
강의를 들으면서
이제 챕터 2를 듣고있습니다 정렬이나 자료구조 관련되서 문제가 좀 나오는데 자료구조 기본 코드를 직접 구현 할수있을 정도로 공부를 하는것이 좋을까요??
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
31번 질문있습니다.
선생님, 이런식으로 풀었고 돌려보니 잘 결과가 나오는걸 알 수 있는데 채점폴더에서는 0점을 받아서 의문이 듭니다. 제 코드에 어떠한 부족함이 있는지 가르침을 주시면 정말 감사하겠습니다. #include<iostream> #include<algorithm> #include<vector> using namespace std; int main() { char ox[100]; cin >> ox; int index = 1; int ccount = 0, hcount = 0; int value = 0; if (ox[index] != 'H') { while (ox[index] != 'H') { ccount++; index++; } for (int i = ccount; i > 0; i--) { value += (ox[i] - '0') * pow(10, ccount - i); } value *= 12; index++; //H의 바로다음 //while (ox[index] != '\0') { hcount++; index++; } //cout << index << endl; if (ox[index] == '\0') { value++; printf("1%d \n", value); } while (ox[index] != '\0') { hcount++; index++; } for (int i = index - 1; ox[i]!='H'; i--) { value += (ox[i] - '0') * pow(10, index-1 - i); } printf("%d \n", value); } if (ox[index] == 'H') { value = 12; index++; if (ox[index] == '\0') { printf("%d \n", ++value); } if (ox[index] != '\0') { while (ox[index] != '\0') { hcount++; index++; } for (int i = index - 1; i > hcount; i--) { value+=(ox[i] - '0')* pow(10, index - 1 - i); } printf("%d \n", value); } } }
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
선생님, 28번 문제를
'일의 자리부터 연속적으로' 가 아니라 N!값을 구하였을 때, 일의자리부터 10의 자리는 모두 00이지만 중간에 000이나 0000이 나오게 되는 경우로 문제를 변형하였을 경우에는 어떻게 푸는게 제일 효율적일지 궁금합니다. 1) N!값을 구한 뒤 그 값을 char로 형변환 한 다음 하나씩 탐색해나가면서 연속된 0의 개수를 구하는 방법 현재로서는 이 방법 밖에 떠오르지 않는데.... 혹시 별 다른 방법이 있을까요? 궁금합니다 .
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
23번 질문드립니다.
선생님, 안녕하세요? 영상 항상 잘 보고 있습니다. 다름이 아니라 현재 저의 코드는 이런데 case2부터 5까지 전부 타임 리밋이 발생하고 있습니다. 그 이유는 바로 아래 정의된 arr에 대해 stack around arr was corrupted 메세지 발생입니다. 오버플로우가 났다거나 별 문제가 없다고 여겨지는데 어찌하여 이런 것일까요....ㅜㅜㅜ 감사합니다. #include<stdio.h> int main() { int N; scanf("%d",&N); int arr[10000] = { 0, }; for (int i = 0; i < N; i++) { scanf("%d",&arr[i]); } int len[100] = { 0, }; int index = 0; int max = 0; for (int i = 0; i < N-1; i++) { int count = 1; for (int j = i; j < N - 1; j++) { if (arr[j] <= arr[j + 1]) { count++; } else { len[index] = count; index++; break; } } } for (int i = 0; i < N; i++) { if (max < len[i]) { max = len[i]; } } printf("%d", max); }
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
85번 수식만들기 질문드립니다.
#include <stdio.h> int a[30],cal[30],n,max=-2147000000,min=2147000000; int Calc(int index,int a, int b) { switch(index) { case 1: return a+b; break; case 2: return a-b; break; case 3: return a*b; break; case 4: return a/b; break; } } void DFS(int L, int sum) { if(L==n+1){ if(max<sum) max=sum; if(min>sum) min=sum; } else{ for(int j=1; j<=4; j++){ if(cal[j]!=0){ DFS(L+1,Calc(j,a[L],sum)); cal[j]--; } } } } int main(void){ freopen("input.txt","rt",stdin); scanf("%d",&n); for(int i=1; i<=n; i++){ scanf("%d",&a[i]); } for(int i=1; i<=4; i++){ scanf("%d",&cal[i]); } DFS(1,0); printf("%d\n%d\n",max,min); } 위에데로 해보니 출력결과가 64 16 이렇게 나옵니다.(정답은 64 23) 16이 아마 5+3+8해서 나온것 같은데. 분명 위에 DFS함수 보시면 cal[j]-- 로 빼주고 있는데 왜 덧셈연산이 중복되서 두번 나오는걸까요?.. 어디가 잘못됬는지 잘모르겠어서 질문드립니다.
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
마지막 if문
마지막 if문에서 if ( pos < 1 && pos > 10000) pos의 범위가 1보다 작거나 10000보다 클 경우에 continue라면, &&이 아니라 ||으로 해야하지 않나요?
- 해결됨it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
채점관련
안녕하세요 선생님 저는 비주얼 스튜디오로 수업을 듣고 있는데요 각 문제 대한 각 소스파일들을 동일한 프로젝트 내에서 계속 생성한 AA.exe파일을 문제를 풀 때마다 새로 저장한 뒤 채점을 하고 있는데 처리되지 않은 예외 : 지정된 파일을 찾을 수 없습니다 라는 메세지가 뜹니다. 이 경우 어떻게 해야할까요? 감사합니다.
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
78번 질문드립니다.
find 함수에서 ufn[n]=find(ufn[n]); 이 부분으로 인해서 최소비용을 구한이후에 ufn 배열을 출력하면 전부 요소가 6으로 되어있어야 하는거 아닌가요? 근데 출력해보니 434646444 이런식으로 나오는데 이유가 뭔가요?