월 15,400원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
뒤집은 소수문제
제가 혼자 숫자 뒤집는 코드를 짜봤는데 혹시 여기서 무엇이 잘못되었는지 알려주실 수 있나요...? 콘솔창엔 아무것도 뜨지않았습니다.
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
프로그래밍 난이도 수준
안녕하세요 선생님 한가지 궁금한게 있어 문의 드립니다.이 모든 문제의 난이도는 level 1~2까지의 수준인가요? 아니면 level3까지의 문제 난이도도 있는지 궁금합니다.
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
4-나이차이 문제 질문드립니다
선생님 저는 입력받을 정수를 동적할당시켜 정수의 배열을 사용해서 정렬을 시키고 나이차이를 출력했는데 이때는 input.txt를 어떻게 사용하는지 잘 모르겠어서 질문드렸습니다! 참고로 제가 쓰는것은 visual studio 2022버전입니다!
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
13번 0점...
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. #include <iostream>int arr[10];int main(){ //freopen("input.txt.txt","rt",stdin); char num[101]; int i; int tmp; int max = 0; int Smax; scanf("%s", &num); for(i=0; num[i]!= '\0'; i++) { tmp = num[i] - 48; arr[tmp]++; } for(i=0; i<10; i++) { if(arr[i]>=max) { max = arr[i]; Smax = i; } } printf("%d\n",Smax); return 0;} 왜 빵점만 나오는 거죠? 어디가 틀린 건가요ㅠㅠ?
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
22. 때때로 time limit
같은 코드인데, 한번은 array(배열)로, 한번은 vector로 두었습니다.array로 했을 때는 4번예제에서 time_limit이 났는데 vector로 했을 때는 다 success였습니다. 같은 경우엔 array가 더 빠른거 아닌가요? 왜 이러죠#include <iostream> #include <vector> int main(void) { int n, k, max, sum = 0; std::vector<int> tem(100001); scanf("%d %d", &n, &k); tem[0] = 0; for (int i = 1; i <= n; i++) { scanf("%d", &tem[i]); sum += tem[i]; if (i == k) max = sum; else if (i >= k) { sum -= tem[i - k]; if (sum > max) max = sum; } } printf("%d", max); return 0; }#include <iostream> int main(void) { int n, k, max, sum = 0; int tem[100001]; freopen("input.txt", "rd", stdin); scanf("%d %d", &n, &k); tem[0] = 0; for (int i = 1; i <= n; i++) { scanf("%d", &tem[i]); sum += tem[i]; if (i == k) max = sum; else if (i >= k) { sum -= tem[i - k]; if (sum > max) max = sum; } } printf("%d", max); return 0; }
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
40번 교집합 문제
#include <iostream> using namespace std; int main() { int i, j, tmp, a[30001],a1, b[30001],b2, c[30001], cnt=0; cin >> a1; for (i = 0; i < a1; i++) { cin >> a[i]; } cin >> b2; for (i = 0; i < b2; i++) { cin >> b[i]; } for (i = 1; i < a1; i++)//a { tmp = a[i]; for (j = i - 1; j>0 ; j--) { if (a[j] > tmp) { a[j + 1] = a[j]; } else { break; } //조건에 안맞으면 바로 밑으로 넘어가게 해야한다. } a[j + 1] = tmp; } for (i = 1; i < b2; i++)//b { tmp = b[i]; for (j = i - 1; j > 0; j--) { if (b[j] > tmp){ b[j + 1] = b[j]; } else { break; } } b[j + 1] = tmp; } for (i = 0; i < a1; i++) { for (j = 0; j < a1; j++) { if (a[i] == b[j]) { c[i] = a[i]; cnt++; } } } for (i = 0; i < cnt; i++) { cout << c[i]; } return 0; } 안녕하세요 선생님 제가 삽입정렬 방식으로 하고 코들르 구현하였는데 출력은 -로 나옵니다.어디서 잘못된거인지를 못찾겠어서 질문 드립니다.
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
Time limit가 걸리는데 어떻게 해결해야 할까요?
#include <stdio.h> #include <vector> using namespace std; int n, m; int answer = 0; void solution(vector<vector<int>> & arr, vector<int> & visited, int current){ if(current == n){ answer++; return; } visited[current - 1] = 1; for(int i=0;i<n;i++){ if(arr[current-1][i]!=0 && visited[i] == 0){ visited[i] = 1; solution(arr, visited, i+1); visited[i] = 0; } } visited[current - 1] = 0; } int main(void){ //freopen("input.txt", "rt", stdin); int start, end; scanf("%d %d", &n, &m); vector<vector<int>> arr(n, vector<int>(n)); vector<int> visited(n); for(int i=0;i<n;i++){ for(int j=0;j<n;j++){ scanf("%d %d", &start, &end); arr[start-1][end-1] = 1; } } solution(arr, visited, 1); printf("%d", answer); return 0; }안녕하세요. 다름이 아니라 수업 듣기 전 짠 코드를 이용해 채점 프로그램을 실행시키면 모든 case에 대해 time limit가 나와서 질문드립니다. 위 코드에 어떤 문제가 있을까요? 채점파일 내에 있는 input.txt 입력받고 실행시키면 전부 정답으로 나옵니다.
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
90번 심바문제 질문입니다.
안녕하세요 선생님의 코드를 보면서 이해가 안가는 부분이 있습니다. 영상에서 64~66번째 줄에서 ch[i][j]=0으로 초기화를 시키는데 그 이유가 뭔지 알 수 있을까요? 제 생각엔 심바가 이동을 한 map에서만 0을 적용해서 구하면 될 거 같은 생각이 들어서 질문드립니다.
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
선생님 배열을 잘 모르겠습니다...
선생님 여기 와일문에서 tmp변수를 소인수분해 하는 과정까진 이해를 했습니다.. 근데 분해 될 때마다 ch [j]++을 하라고했는데 이건 j배열의 인덱스값을 늘려서 3 1 1 이런식으로 j배열이 저장되는거 아닌가용? 프린트문에서는 ch[i]로해서요! 물론 컴파일해보면 선생님이 설명해주신게 맞습니다! 다만 제가 이해가 잘 안되어서요 ㅠㅠㅠ
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
70번 이해가 안돼는게 있습니다.
안녕하세요 선생님 혼자서 해 볼려고 해도 구현이 하기가 어려워 선생님의 코드를 보면서 원리를 이해하고 있는 학생입니다.선생님이 만드신 코드중에 for (i = 0;i < map[x].size(); i++) { if (ch[map[x][i]] == 0) { ch[map[x][i]] = 1; Q.push(map[x][i]); dis[map[x][i]] = dis[x] + 1; } i = 0;i < map[x].size(); i++이 부분 부터 이해가 잘 되질 않습니다. x가 1이면 map[1]의 개수는 2가 되고 map[1][0], map[1][1]로 돼야 할 텐데 어떻게 ch[map[1][3]=3] = 1으로 가는지 모르겠습니다.
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
질문있습니다!!
안녕하세요 선생님 저는 59번 문제를 참고하여 진행을 하였습니다. 제가 작성한 코드중에서 뭐가 틀린건지 봐주시면 감사드리겠습니다.틀린 부분을 잘 몰라 질문 올립니다.#include <iostream> #include <vector> using namespace std; int n, tatal = 0; int ch[11]; int a[11]; void DFS(int L, int sum) { int sum2 = 0; if (L == n + 1) { for (int i = 1; i <= n; i++) { if (ch[i] == 1) { sum = sum + a[i]; } if (ch[i] == 0) { sum2 = sum2 + a[i]; } } if (tatal - sum == sum2) { cout << "YES"; } else { cout << "NO"; } } else { ch[L + 1] = 1; DFS(L, sum); ch[L + 1] = 0; DFS(L, sum + a[L]); } } int main() { cin >> n; for (int i = 1; i <= n; i++) { cin >> a[i]; tatal = tatal + a[i]; } DFS(1, 0); //시작점 합 }
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
질문이있습니다!!
안녕하세요 선생님 좋은 수업 제공해 주셔서 감사드리다는 말씀 드립니다.제가 작성한 코드에 문제를 못찾겠어서 질문을 드립니다.저는 stack에 문자를 쌓고 나중에 pop을 통해 빼서 '('이 나오면 cnt++를하고 아니면 빼기를 통해 마지막에 0이 나오면 yes no를 나오게 하여 작성하였습니다. 그런데 계속 no만 나와 그 이유를 알고자 합니다. 답변 부탁드립니다.
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
토마토 시간초과 질문입니다
선생님 풀이 보기 전에 두가지 방법으로 풀었는데 두 방법모두 4, 5번 input에 대해 시간초과가 나옵니다 대량 3~4초씩 걸립니다 ㅠㅠ두가지 방법 하나는 선생님 풀이와 사소한 부분을 제외하면 같은 방식이고, 다른 하나는 pair를 사용해서 level을 올리는 방식으로 했습니다. 두번째 방식 코드 올려봅니다.왜 시간초과가 생기는 것일까요..?ㅠㅠ#include<iostream> using namespace std; #include<vector> #include<algorithm> #include<queue> struct Pos { bool operator==(const Pos& other) { return y == other.y && x == other.x; } bool operator!=(const Pos& other) { return !(*this == other); } Pos operator+(const Pos& other) { Pos tmp = *this; tmp.y = tmp.y + other.y; tmp.x = tmp.x + other.x; return tmp; } int y; int x; }; Pos front[4] = { {-1, 0}, {0, 1}, {1, 0}, {0, -1}, }; int main(void) { cin.tie(NULL); ios_base::sync_with_stdio(false); freopen("in5.txt", "rt", stdin); // 파일 입력받음 int n, m; // n은 상자 세로, m은 상자 가로 cin >> m >> n; vector<vector<int>> box(n, vector<int>(m)); queue<pair<Pos, int>> q; for (int y = 0; y < n; y++) { for (int x = 0; x < m; x++) { cin >> box[y][x]; if (box[y][x] == 1) { q.push(make_pair(Pos{ y, x }, 0)); } } } int now_lv; while (q.empty() == false) { pair<Pos, int> tmp = q.front(); q.pop(); Pos now = tmp.first; now_lv = tmp.second; for (int dir = 0; dir < 4; dir++) { Pos next = now + front[dir]; if (next.y<0 || next.y>n - 1 || next.x<0 || next.x>m - 1) continue; if (box[next.y][next.x] == -1 || box[next.y][next.x] == 1) continue; box[next.y][next.x] = 1; q.push(make_pair(next, now_lv + 1)); } } for (int y = 0; y < n; y++) { for (int x = 0; x < m; x++) { if (box[y][x] == 0) { cout << "-1"; return 0; } } } cout << now_lv; }
- 해결됨it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
64번 스택 오버플로우 뜨는 이유가 궁금합니다!
제가 푼 방식은 정점이 n번까지 다다르면 카운트를 하나 올리고 방문여부를 체크하던 배열을 원상태로 초기화하는 방법입니다.근데 이게 m이 작을 때는 잘 작동하는데 m이 커지는 순간 스택 오버플로우가 발생합니다..! 손그림 그려서 해봤는데 스택 오버플로우가 발생할 것 같기도 하고 왜 발생하는 건가 싶기도 해서 질문드립니다...(너무 긴가민가해서 좀 더 명쾌한 이유를 알고 싶어서요 ㅠㅠ)#include<iostream> using namespace std; #include<vector> #include<algorithm> #include<string> int n, m; // 정점 n개, 간선 m개 vector<vector<int>> adjacent; // -1은 연결 없음 vector<int> visited; int ans = 0; void DFS(int pre) { if (pre >= n) // n에 다다르면 카운트 증가, 방문 배열 초기화 { ans++; visited.clear(); visited.resize(n + 1, 0); return; } visited[pre] = 1; // 일단 방문했으니 체크 for (int i = 1; i <= n; i++) { // 방문한 적 있거나 연결 끊겨있으면 continue해서 무시 if (visited[i] == 1 || adjacent[pre][i] == -1) continue; DFS(i); // 그 외라면 DFS 재귀호출 } } int main(void) { cin.tie(NULL); ios_base::sync_with_stdio(false); freopen("input.txt", "rt", stdin); // 파일 입력받음 cin >> n >> m; adjacent.resize(n + 1, vector<int>(n + 1, -1)); for (int i = 0; i < m; i++) { int s, e; // 시작 정점, 도착 정점 cin >> s >> e; adjacent[s][e] = 1; } visited.resize(n + 1, 0); DFS(1); cout << ans; }아 그런데 스택 오버플로우 생기는 것 땜에 강사님 설명 봤고, 설명을 통해 고친 내용은 완벽히 이해된 상태입니다! 그냥 스택 오버플로우 발생 이유를 정확히 알고 싶어 질문드립니다 감사합니다
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
채점프로그램 구동 문제
안녕하세요 수업 열심히 듣고 따라가는 학생입니다!37번 문항에 질문 및 문제가 생겨 문의드립니다. 아래와 같은 코드를 작성했고, 이를 실행 후 채점폴더를 활용해 채점했을때 test 3,4,5번에서 exit_code 에러가 발생합니다.#include <iostream> using namespace std; int scan(int n, int* arr, int len); int main() { int S; int N; int scanres; cin >> S >> N; int* cache = new int[S](); int* work = new int[N]; for(int i = 0; i<N; i++){ cin >> work[i]; } cache[0] = work[0]; for(int i = 1; i<N; i++){ scanres = scan(work[i], cache, S); if(scanres != -1){ //캐시에 있다 for(int j = scanres - 1; j >= 0; j--){ cache[j+1] = cache[j]; } cache[0] = work[i]; } else{ //캐시에 없다 for(int j = S-1; j >= 0; j--){ cache[j+1] = cache[j]; } cache[0] = work[i]; } } for(int i = 0; i<S; i++){ cout << cache[i] << " "; } return 0; } int scan(int n, int* arr, int len){ for(int i = 0; i < len; i++){ if(arr[i] == n) return i; } return -1; }아무리 봐도 문제를 모르겠어 input 3,4,5를 열고 제 코드에 대입해 실행해본 결과 output 3,4,5와 일치하는 결과가 출력되었습니다.아래 그림에서 왼쪽은 채점프로그램 점수이고, 오른쪽 위는 input 3 프로그램 실행시 결과, 그 아래는 output 3 파일입니다. input3 실행결과와 output3 결과가 일치하는것을 확인하실 수 있습니다.어느부분에서 에러가 나는 것인지 조언 부탁드리겠습니다.
- 해결됨it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
24번 jolly jumpers 무엇이 문제일까요?
//24 jolly jumpers // 5번 케이스에서 NO가 나와야 하는데, YES가 나옵니다. // 배열 인덱스 범위를 조절하는 코드를 추가하면 문제야 잘 해결된다지만, // 왜 5번케이스에 대해서 YES가 뜨는지 궁금합니다! #include <stdio.h> #include <cmath> using namespace std; int arr[105]; int N, i, a, b,subs; int main(void){ scanf("%d", &N); scanf("%d", &a); for(i=1; i<N; i++){ scanf("%d", &b); subs = abs(a-b); a=b; if(arr[subs]!=0) { printf("NO"); return 0; } arr[subs]++; } for(i=1; i<=N-1; i++){ if(arr[subs]==0) { printf("NO"); return 0; } } printf("YES"); return 0; }
- 해결됨it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
제가 푼 방식이 시간이 좀 오래 걸리는 것 같아 질문합니다.
안녕하세요!제가 queue와 구조체를 이용해 문제를 풀었는데 1초가 넘게 걸려서 무엇이 문제인지 질문합니다queue의 push, pop은 O(1)이라고 알고 있는데도 이렇게 오래 걸려서..제가 유추하기로는 구조체를 썼기 때문인 것 같은데...만약 그렇다면 왜 그런 것인가요...?코드 아래 첨부합니다.#include<cstdio> using namespace std; #include<vector> #include<algorithm> #include<string> #include<queue> int main(void) { //cin.tie(NULL); // 얘네 3줄은 iostream include했을 때 필요한 것. //cout.tie(NULL); //ios::sync_with_stdio(false); freopen("in4.txt", "rt", stdin); // 파일 입력받음 struct NumWork { int work; // 작업 번호 int t; // 작업 시간 }; int n, k; scanf("%d", &n); queue<NumWork> work; for (int i = 0; i < n; i++) { int tmp; scanf("%d", &tmp); work.push(NumWork{ i + 1, tmp }); } scanf("%d", &k); int time = 0; // 총 시간 while (work.empty() == false) { if (time == k) // 만약 k초면 break; break; NumWork now = work.front(); work.pop(); time++; // 시간은 언제나 흐르므로 ++ if (now.t - 1 == 0) // 작업시간이 0됐으면 다시 queue에 넣지 않음 continue; work.push(NumWork{ now.work, now.t - 1 }); } if (work.empty()) // work가 empty면 모든 작업이 k이전에 끝난 것 printf("-1"); else // empty가 아니면 k초 이후에 작업이 남아있었음 printf("%d", work.front().work); }
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
9번 모두의 약수 for문 질문
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.안녕하세요 처음 하는 c++수업인데 좋은 강의 잘 듣고 있습니다.선생님께서 말씀하신 i의 배수를 통해 개수를 구한다고 하셨는데for (int i = 1; i <= a; i++) { for(int j=i; j<=a; j=j+i) { cnt[j]++; }for(j=i; j<=a; j=j+i)부분 에서 j=j+i가 어떻게 i배수로 되는지 이해가 되질 않습니다. 제가 알기론 증감 부분인데 그러면 j=j+i에서 i=1, j=1일때 j=1+1로 2가 되면서 1~2로 cnt[1] cnt[2]에만 cnt[j]에 1씩 들어가고i=2일떄 j=2가 되면서 j=2+2=4가 되는데 그러면cnt[2]=2 cnt[4]=1이 되는게 맞는건가요?
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
5의 갯수만 구했습니다. 그런데 예외가 있을까 싶어 질문합니다.
저는 n!에서 10이 나오려면 무조건 5가 몇갠지만 체크하면 된다고 생각했습니다. 왜냐하면 우선 5!일 때 5의 갯수가 1개 있기 때문에 10이 나오기 때문입니다. 이미 5!일 때부터 5의 갯수는 1개, 2의 갯수는 3개니까요.5의 제곱인 25!이라고 해도 5의 갯수는 겨우 5개인 반면 2의 갯수는 2~8까지만 봐도 이미 5개를 넘겼으니까요.그래서 저는 그냥 5의 갯수만 세서 5의 갯수가 뒤에 붙는 0의 숫자라고 풀었습니다만 정말 만에 하나 예외가 있을 수도 있으니까요... 예외가 있는지 궁금합니다!
- 해결됨it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
이거 크루스칼로 풀어도 풀리는데 맞는건가요?
const p = [ [1, 2, 6], [1, 3, 3], [3, 2, 2], [2, 4, 1], [2, 5, 13], [3, 4, 5], [4, 2, 3], [4, 5, 7], ]; solution(p, 5, 8); function solution(p, city, line) { p.sort((a, b) => a[2] - b[2]); const unf = Array(city + 1).fill(0); for (let i = 0; i < city + 1; ++i) unf[i] = i; function find(v) { if (v === unf[v]) return v; else return (unf[v] = find(unf[v])); } function union(f1, f2) { const c1 = find(f1); const c2 = find(f2); if (c1 != c2) { unf[c1] = c2; return true; } return false; } let cost = 0; for (let i = 0; i < p.length; ++i) { const [c1, c2, val] = p[i]; if (union(c1, c2)) { cost += val; } } return cost; } 크루스칼로 풀어도 풀리는데 이것도 맞는 풀이인가요?테스트 케이스가 더 잇엇으면 좋겟네요