월 15,400원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
속도문제에 대해서 궁금한 것이 있습니다!
46번 멀티테스킹을 C++로 풀어보았는데요, 채점 폴더에서 4번째 부터 타임리미트가 떠요 ㅠㅠ 그래서 궁금증이 생겼습니다. deque을 사용하면 index를 사용해서 원소에 접근할 때 일반 배열보다 더 오래 걸리나요? 그게 아니라면, 어느 부분에서 더 느려져서 타임리미트가 뜨는 건가요? #include<iostream> #include<deque> #include<algorithm> using namespace std; #define endl '\n' int main(void) { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); int n, k, i, sum = 0; cin >> n; deque<int> arr(n); for (i = 0; i < n; i++) { cin >> arr[i]; sum += arr[i]; } i = -1; cin >> k; if (sum <= k) { cout << -1; return 0; } while (k) { i++; if (i == n) i = 0; if (arr[i] > 0) { //cout << i << " "; k -= 1; arr[i]--; } } while (1) { i++; if (i == n) i = 0; if (arr[i] == 0) continue; else break; } cout << i+1; return 0; }
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
for문 거꾸로 셀때
예를 들어 문자열을 for문을 돌려서 읽을때 -> for(i=0;a[i]!='\0';i++)이렇게 a[i]!='\0'을 사용하여 strlen(a)을 사용하지 않고 for문을 돌릴 수 있었습니다 . 그러면 거꾸로 셀때도 strlen(a)을 위한 라이브러리를 쓰지 않고도 간단하게 for문을 만들고 싶은데 for(i=? ; i>=0; i--) 이런식으로 i=?에 무엇인 들어가야 하는지 방법이 있을까요? 아니면 아이디어라도 있을까요? . 추가설명) for문을 돌려서 strlen(a)대신 문자열 길이를 구하고 시작하라는 것 같은 전처리가 필요한 과정이 아닌 정말 for문 하나로만 가능하도록요 ! (파일 인클루드 없이, 전처리 할 필요가 없이 가능하도록)
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
예외사항 질문입니다.
안녕하십니까!? 늘 좋은 강의 잘 듣고 있습니다. 문제에서 보면, 1. 도시의 갯수가 1~100까지로 되어 있는데 코드상에서도, vector<pair<int, int> > map[100] 이 되어야 하는 것이지요? 2. 도로비용이 음수일 수 도 있다고 했는데, 이 경우도 고려가 되는건가요? 감사합니다.
- 해결됨it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
string 질문입니다!
안녕하세요. 이렇게하면 b가 출력이 안되는데 이유를모르겠습니다.. string 으로 하고싶으면 어떻게 바꿔야하나요? #include <iostream> #include <string> using namespace std; int main() { string a, b; getline(cin, a); int p =0; for(int i=0; i<a.size(); i++){ if(a[i] != ' '){ if(a[i] >= 65 && a[i] <= 90){ b[p++] = a[i]+32; }else{ b[p++] = a[i]; } } } b[p] ='\0'; cout<<b<<'\n'; return 0; }
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
안녕하세요
선생님, 강의 잘 보고 있습니다. 해설 보기 전에 지금 미리 문제를 시도하고 있는데요, 여기 문제의 대목을 보면 - 가장 어린 심바는 몸집이 2이다 -각 토끼의 크기는 (1~7)이고 9는 심바를 뜻한다 라고 나와있는데 저 '9'는 심바의 처음 위치를 말하는 것이겠죠?? 그렇다면 처음 위치는 9이고, 심바의 몸집이 2이다. 이렇게 이해하는게 맞나요? 토끼의 크기와 같은 문장안에 언급되어 있어서 문제 이해하는데 헷갈리고 있습니다.
- it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
정답소스파일
삭제된 글입니다
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
오버플로우 관련 질문이 있습니다
안녕하세요 선생님. 수업을 듣고있는 김용준 이라고 합니다. 채점결과로는 5가지 case 전부 success가 나왔지만, Q.제가 짠 코드에서 오버플로우를 고려해야 하는지를 여쭤보고 싶습니다. ------------------------------------------------------- int isJollyJumper(int*arr, int N); int main(void) { int *arr1, *arr2; int N; int i; scanf("%d",&N); arr1 = (int*)calloc(N,sizeof(int)); arr2 = (int*)calloc(N-1,sizeof(int)); // 1. 사용자로 부터 수열을 입력받는다 for(i=0; i<N; i++) { scanf("%d",&arr1[i]); } //2. 입력받은 수열에서 인접한 값의 차를 구한다 // 이때, 큰수에서 작은수를 빼서 차를 구하도록 함 for(i=1; i<N; i++) { if(arr1[i] > arr1[i-1]) arr2[i-1] = arr1[i] - arr1[i-1]; else arr2[i-1] = arr1[i-1] - arr1[i]; } // 3. 위에서 구한 차 값을 기반으로, 입력한 수열이 // jolly jumper인지 여부를 구하여, 화면에 결과 출력 if(isJollyJumper(arr2,N) == 1) printf("YES\n"); else printf("NO\n"); free(arr1); free(arr2); return 0; } int isJollyJumper(int*arr, int N) { int i; int *isJolly; isJolly = (int*)calloc(N,sizeof(int)); // N개의 수열을 입력받은 경우, 크기가 N인 배열을 생성해 // 0번 element를 사용하지 않고, 1~N-1번 element를 // 사용 하여 jolly jumper 여부를 판별 // 차이가 1에서 N-1 사이에 존재하면, isJolly 배열의 해당 // 인덱스를 1증가 for(i=0; i<N-1; i++) { if(arr[i] >= 1 && arr[i] <= N-1) isJolly[arr[i]]++; } for(i=1; i<N; i++) { if(isJolly[i] != 1) return 0; } return 1; } ------------------------------------------------------ 저는 위와같이 코드를 작성하였습니다. 이때 저는 큰수에서 작은수를 빼서 차를 구하는 방식으로 작성하였으므로, 이러한 방식으로 차이를 구할 때 오버플로우가 나게 되면 그 결과는 -2147483648 ~ -1 이 됩니다. 그런데 어차피 N의 값의 범위가 3~100 이므로 오버플로우가 났을 때 적어도 1에서 99사이의 수가 나온다면 jolly jumper가 아닌 수열인데 jolly jumper로 잘못 해석할 수 있겠지만, 큰수에서 작은수를 빼는 방식으로는 오버플로우가 나더라도 1에서 99사이의 수가 나올 수 없으므로, 제가 짠 코드대로 하면은 오버플로우가 나더라도 결과가 정상적으로 구해진다고 생각하였습니다. Q.제가 맞게 생각한건지 궁금합니다.
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
C++ STL Map
struct Inform { string id; string nick; vector<string> record; //셍상지 Inform(string _id, string _nickName, string _record): id(id), nick(nickName) { record.push_back(_record); } }; int main() { map<string, Inform> m; m.insert(pair<string, Inform>("hello",Inform("123","222","333"))); cout << m["hello"].nick << endl; } 제가 map의 value값에 구조체를 넣어서 출력할려고 하는데 cout << m["hello"].nick << endl; 이부분을 주석 안하고 실행하면 팝업창이 뜨면서 오류납니다... 어떤게 문제인지 잘 모르겠어요... 생성자가 분명히 호출잘됐는데 왜 접근을 못하는걸까요??..
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
16번, string형 관련 질문 있습니다.
선생님 안녕하세요. 이제 막 공부하기 시작한 학생입니다! 16번 문제를 보고 첫번째 문자열의 문자가 두번째 문자열에 있으면 해당 문자를 '0'으로 바꾸어, 아나그램이라면 두번째 문자열이 '00000' 이런 식으로 바뀌게끔 코드를 작성했습니다. 제가 생각한 방법으로 코드를 짜려고 하니 string 이 필요할 것 같아 char형 대신 string형으로, scanf 대신 cin을 사용해 문제를 해결하였습니다. 제가 아무래도 string형과 cin/cout에 익숙해져있어서 이런 식으로 생각을 하게 된 것 같은데, 코딩테스트 준비를 위해서는 string형 대신 char형의 배열로 문자열을 다루는 것에 익숙해지는게 코테 보는데 더 도움이 될까요? 코딩테스트에서(c++의 경우) cin/cout 대신에 scanf/printf를 더 많이 사용하는지도 궁금합니다. #include <iostream> #include <string> using namespace std; int main() { //freopen("input.txt", "rt", stdin); string str1; string str2; //scanf("%s", &str1); //scanf("%s", &str2); cin>>str1>>str2; int pos; for (int i = 0; i < str1.size(); i++) { pos = (int)str2.find(str1[i], 0); if(pos==-1){ printf("NO"); return 0; } else{ str2[pos]='0'; } } printf("YES"); return 0; }
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
65번 문제 질문있습니다
배열 값이 1일때 벽이라고 되어있어서 아래와 같이 7x7배열 상하좌우에 벽을 둘러서 문제를 풀었는데, 만약 배열이 더 커진다면 이런 방식이 시간이나 메모리 부분에서 눈에 띄는 낭비가 발생할까요?? // 65. 미로탐색(DFS) #include <iostream> #include <vector> using namespace std; vector<vector<int>> map(9, vector<int>(9,1)); vector<vector<int>> check(9,vector<int>(9)); int goX[]={1,0,-1,0}, goY[]={0,-1,0,1}; int cnt=0; void dfs(int y, int x){ // printf("%d %d cnt-%d\n",y,x,cnt); if(x==7&&y==7){ cnt++; return; } for(int i=0;i<4;i++){ if(!map[y+goY[i]][x+goX[i]] && !check[y+goY[i]][x+goX[i]]){ check[y][x]=1; dfs(y+goY[i],x+goX[i]); check[y][x]=0; } } } int main(){ for(int i=1;i<=7;i++) for(int j=1;j<=7;j++) cin>>map[i][j]; dfs(1,1); cout<<cnt; }
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
dps 시간초과 질문드립니다.
DFS 함수내 else 부분에서 매개변수 s 를 사용하지 않고 이전 dfs 문제 풀듯이 새로 check 배열을 사용해서 중복되지 않은 m개의 피자집을 찾으면 시간초과가 뜹니다. 이전 문제와 달리 이번 문제에서는 매개변수를 사용해서 풀어야 하는데 이 매개변수로 시간을 절약할 수 있는가 없는가를 판단하는 것은 숙달되어야 하는 문제인가요?
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
재귀함수
L이 n+1이 될때까지 돌지 않고 중간에 sum값이 만족하면 바로 종료하고 싶어서 기존의 if문 앞에 추가해줘도 괜찮을까요? 똑같이 코드가 반복되어 안좋은 코드인가요? void DFS(int L, int sum){ // 재귀함수에서 return 하면 재귀로 뻗어왔던 함수들이 타고타고 올라가지않고 전부 다 바로 종료 if(sum>(total/2)) return; if(sum==(total-sum)){ flag=true; //return; } if(L==n+1){ if(sum==(total-sum)){ flag=true; return; } } else{ DFS(L+1, sum+a[L]); DFS(L+1, sum); } }
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
함수이름 에러 입니다....!
안녕하세요. 선생님! 강의 잘 듣고 있습니다!! 다름이 아니라 선생님께서 구현하신 스택코드에 에러가 떠서요. 전역변수로 잡으신 stack[100]을 그대로 하면 제 컴퓨터에 설치된 Dev-C++5.11에선 에러가 뜨더군요. 그래서 a[100]으로 변경하고 실행하니까 되었습니다! 에러코드는 stack변수 이름이 모호하다(~~~ ambiguous)라는 에러였습니다. 안되시는 분들 참고하세요!
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
이 문제와는 주제가 살짝 달라서 미리 죄송합니다 ㅠㅠ
문제를 꾸준히 풀면서 교수님에 알고리즘과 저에 알고리즘이 다를때가 많았는데요. 코딩테스트를 효과적으로 통과할려면 처음 공부시작할때 습관을 잘 들여나야 한다고 생각합니다. 저의 알고리즘으로 작성한 코드가 100점을 맞았다 하더라도 교수님에 알고리즘으로 한번더 코드를 작성해보는것이 좋을까요? 아니면 바로 넘어가서 다음문제를 빠르게 풀어보는게 좋을까요?
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
선생님, 89번 토마토 문제 마지막 캐이스에서 시간초과가 됩니다.
선생님, 안익은 토마토 개수를 세고 그 갯수를 빼가면서 다 익었는지 안익었는지를 검사하고 큐에 하루마다 -1을 집어넣어서 날짜를 셌습니다. 그런데 나머진 다 되도 마지막 문제만 시간초과가됩니다. 어디서 뭐 때문에 느려진 것인지 알 수 있을까요?? #include <cstdio> #include <queue> using std::pair; int main(){ //freopen("input.txt", "r", stdin); int n, m, tomatocnt = 0, pre = 0, now = 1, day = 0, tox, toy;; short map[1002][1002]; std::queue<pair<int, int>> ripentomato; scanf("%d%d",&n, &m); for(int i = 1; i <= m; i++){ for(int j = 1; j <= n; j++){ scanf("%d", map[i]+j); if(map[i][j] == 0)++tomatocnt; else if(map[i][j] == 1)ripentomato.push(pair<int,int>(j,i)); } } for(int i = 0; i <= n+1; i++)map[0][i] = map[m+1][i] = -1; for(int i = 0; i <= m+1; i++)map[i][0] = map[i][n+1] = -1; int move[4][2] = {{1,0},{0,1},{-1,0},{0,-1}}; pair<int,int> temp; while(tomatocnt){ ripentomato.push(std::make_pair(-1,-1)); while(true){ temp = ripentomato.front(); ripentomato.pop(); if(temp.first == -1)break; for(int i = 0; i < 4; i++){ tox = temp.first+move[i][0]; toy = temp.second+move[i][1]; if(map[toy][tox] == 0){ ripentomato.push(pair<int,int>(tox, toy)); map[toy][tox] = 1; --tomatocnt; } } } if(ripentomato.empty()){ printf("-1"); return 0; } ++day; } printf("%d", day); return 0; }
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
int ch[10] 과 char a[101]
ch[10] 은 왜 int 이고 a[101]은 char 인가요 char a[101]은 한칸한칸에 숫자 넣으니 char 인건 이해가 가는데 int ch[10] 을 char ch[10] 해도 돌아가긴 돌아가는데 제가 너무 이상한거를 파고들며 공부하는건가요..?
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
그래프 내부에 사이클이 생기면 어떻게 조건을 끝내나요?
1->2->3->4 까지 가고 4->5로 가는 간선이 없다고 가정했을때 dfs(4)에서 함수가 끝나지 않을 것 같은데.. 이런 조건은 어떻게 처리해야 하는지 궁금합니다!
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
질문 있습니다!
안녕하세요 선생님 강의 정말 잘 보고 있습니다! 다름이 아니라 제가 코딩 테스트를 자바로 준비하고 연습하는 중에 선생님 수업을 발견을 했습니다 자바 스크립트는 아직 제대로 배우지 못해서 이 강의를 보고 있습니다 ㅜㅜ 그래서 그런데 혹시나 가끔 자바 코드로도 질문 올리게 되면 답장이 가능하신지 여쭤보고 싶습니다!
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
scanf("%d ", ) 할때요
어쩔때 배열 a[i] 를 쓰고 아니면 그냥 &num 을 쓰나요..?
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
강의 문제푸는 방법에대해 여쭤봅니다
안녕하세요 선생님 강의가 처음부터 선생님이랑 문제를 같이 푸는방식으로 진행하시잖아요? 궁금한점이 강의를 듣기전에 문제를 풀어보고 강의를 듣는게 맞는걸까요? 아니면 처음 몇개의 섹션까지는 그냥 강의만 듣다가 나중에가서 미리 문제를 고민하고 풀어본후에 강의를 듣는식으로 할까요? 처음부터 다 고민해보고 풀어보고 강의를 듣는게 제일 좋을것 같지만 지금 시간이 한정적이어서요 ㅜㅜ