월 15,400원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
안녕하세요. 강사님 알파벳 - 70 하는 이유가 [0..26] [27..52]
항상 좋은 강의 감사드립니다. 대문자 [0..26] 소문자 [27..52] 이렇게 카운팅하기 위해서 인가요? .아래 아스키코드 저는 소문자일때 - 96으로 뺐는데 정답으로 채점이 됩니다. // 1. 입력받기 scanf("%s", str); // 2. preWord 배열에 알파벳 for (int i = 0; str[i] != '\0'; i++){ if (str[i] >= 65 && str[i] <= 90){ preWord[str[i] - 64]++; } else { preWord[str[i] - 70]++; } } 이렇게 제출하여도 정답이라고 채점이 됩니다. for (int i = 0; str[i] != '\0'; i++){ if (str[i] >= 65 && str[i] <= 90){ preWord[str[i] - 64]++; } else { preWord[str[i] - 96]++; } }
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
36강 밑에 분과 비슷한 질문
선생님 안녕하세요 열심히 듣고있습니다 저 또한 작은숫자부터 처리했으며 컴퓨터에서 빌드가 되지 않아 결과는 확인해보지 못했습니다 이 코드를 짜면서 생각을 많이 해본다고 했는데 '삽입정렬'의 활용을 전혀 하지 못한것 같습니다 알고리즘 공부할때마다 응용이 되지 않고 기존 머리로 수학문제 풀듯이 접근하는 버릇으로 발전이 없는것 같습니다.. 어디부터 손봐야할지 조언좀 부탁드립니다 ㅠㅠ #include <stdio.h> #include <vector> #include <algorithm> int main(){ int n,i,j,idx,tmp,cnt; int a[100]; // scanf("%d",&n); // for(i=0;i<n;i++){ // scanf("%d",a[i]); // } n = 8; a[0]=5; a[1]=3; a[2]=4; a[3]=0; a[4]=0; a[5]=2; a[6]=1; a[7]=1; a[8]=0; for(i=1;i<=n;i++){ tmp=i; cnt=0; for(j=idx;j>=0;j--){ if(a[j]<tmp) cnt++; } for(j=(idx+cnt);j<n;j++){ if(a[j]<tmp) cnt++; } a[idx+cnt]=tmp; } for(i=0;i<n;i++){ printf("%d",a[i]); } return 0; }
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
제공파일 관련
1회에 있는 강의 자료에서 압축을 풀면 악성코드가 감지 된다고 알약에서 뜨는데 왜 그런가요? 프로그램을 악성코드로 잘못 인식하는 것인가요? AA.exe는 어디에 있는 건가요?? DEV C++에서 생성시키는 파일인가요? DEV C++ 설치 없이 visual studio로는 채점이 불가능 한가요?
- it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
파일 입출력 문장 실행
삭제된 글입니다
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
비주얼스튜디오랑 dev c++ 차이점이 궁금합니다
강의보고 공부할때는 dev c++로 공부하고 똑같이 비주얼스튜디오에서 실행시키면 전혀 다른 값이 나옵니다. 왜 그런걸까요? 현재 vs2019 사용하고 있습니다.
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
추출하는 자연수 질문이요
문제에서 추출해서 만들어지는 자연수는 두자리를 넘지 않기 때문에, res=res*10+(a[i]-48) 식이 가능한거죠?? 만약 3자리까지 추출될수 있다면 식을 어떻게 해야할까요??
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
Jolly Jumper 문제에서 질문 하나만 드립니다
반복문 안에서 두 수의 차이를 비교하는 부분인 int pos = abs(prev - num)을, prev처럼 따로 변수를 만들지 않고 저는 배열을 만들어 입력받게 했는데요, int pos = abs(jolly[i] - jolly[i-1]) 처럼 말입니다. 이렇게 하면 5번 케이스에서 시간초과 오류가 나는데 혹시 이유를 알 수 있을까요? 저 부분 빼고는 모두 동일한데 왜 저렇게 하면 타임리미트가 되는지 궁금합니다. C++에서 배열 계산이 원래 느린편인가요? cin >> jolly[0]; for(int i = 1; i < N; i++){ cin >> jolly[i]; int pos = abs(jolly[i] - jolly[i - 1]); // 타임에러 부분 // 이하 생략 }
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
입력이 더 많아지면 제 방법을 사용할 수 있을지 모르겠습니다.
안녕하세요 선생님, 강의 잘 듣고 있습니다. 89번 토마토는 선생님과 다른 방법으로 풀었는데, 마지막 입력인 in5에서 아슬아슬하게 0.8초 ~ 0.9초가 나옵니다. 반면 선생님의 소스 코드로 시간을 측정해 보니 제 코드보다 절반 정도 단축된 시간인 0.47초가 나오더라고요. 제공해 주신 채점기는 모두 통과했지만, 입력이 여기서 더 커지면 제 구현으로 채점 사이트를 통과하지 못할 거라는 생각이 듭니다. 한번 소스 코드를 봐 주시면 감사하겠습니다. #include <iostream> #include <vector> #include <queue> using namespace std; int grid[1000][1000]; int width, height; int gridSize; int ripeTomatoSize; queue<pair<int, int>> ripeTomatos; queue<pair<int, int>> affectedTomatos; pair<int, int> directions[4] = {{-1, 0}, {1, 0}, {0, -1}, {0, 1}}; int BFS(){ int day = 1; while(!ripeTomatos.empty()){ // 오늘 익어 있는 토마토들을 꺼내 다른 토마토들을 익힘 while(!ripeTomatos.empty()){ pair<int, int> cell = ripeTomatos.front(); ripeTomatos.pop(); for(int i = 0; i < 4; i++){ int nextRow = cell.first + directions[i].first; int nextCol = cell.second + directions[i].second; // 범위를 벗어난 경우 if(nextRow == -1 || nextRow == height || nextCol == -1 || nextCol == width) continue; // 빈 곳이거나 이미 익은 공간인 경우 else if(grid[nextRow][nextCol] == -1 || grid[nextRow][nextCol] == 1) continue; else{ // 현재 익어 있는 토마토 덕분에 익은 토마토를 affectedTomatos 큐에 집어넣음 affectedTomatos.push(make_pair(nextRow, nextCol)); grid[nextRow][nextCol] = 1; ripeTomatoSize++; } } // 모든 토마토가 다 익었으면 탈출 if(ripeTomatoSize == gridSize) return day; } // 오늘 익은 토마토들(affectedTomatos)을 이미 익은 토마토(ripeTomatos)들로 옮김 swap(affectedTomatos, ripeTomatos); day++; } return -1; } int main(int argc, char** argv) { cin >> width >> height; bool allRipen = true; for(int i = 0; i < height; i++){ for(int j = 0; j < width; j++){ cin >> grid[i][j]; if(grid[i][j] == 0) allRipen = false; else if(grid[i][j] == 1){ ripeTomatos.push(make_pair(i, j)); ripeTomatoSize++; } else if(grid[i][j] == -1){ gridSize--; } } } gridSize += width * height; if(allRipen == true){ cout << 0; } else cout << BFS(); return 0; }
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
다익스트라 알고리즘 질문드립니다.
안녕하세요 선생님, 다익스트라 알고리즘 질문드립니다. 제가 강의를 듣고 이해하면서 나름대로 주석을 적어 봤는데 맞는지 모르겠습니다. 한번 확인해 주시면 정말 감사하겠습니다. 선생님의 답변이 학습에 큰 도움이 되고 있습니다. #include <iostream> #include <vector> #include <queue> #include <algorithm> #include <limits> using namespace std; struct Edge { int destVertex; int distance; Edge(int dest, int weight){ destVertex = dest; distance = weight; } bool operator < (const Edge &edge) const { return distance > edge.distance; // minimum heap } }; int main(int argc, char** argv) { freopen("input.txt", "rt", stdin); int vertexSize, edgeSize; cin >> vertexSize >> edgeSize; vector<Edge> graph[vertexSize + 1]; for(int i = 0; i < edgeSize; i++){ int source, dest, cost; cin >> source >> dest >> cost; graph[source].push_back(Edge(dest, cost)); } vector<int> dists(vertexSize + 1, INT_MAX); priority_queue<Edge> myPQueue; myPQueue.push(Edge(1, 0)); dists[1] = 0; while(!myPQueue.empty()){ // 현재 시점에서 최소 거리로 이동할 수 있는 엣지를 꺼냄 Edge edge = myPQueue.top(); myPQueue.pop(); // 꺼낸 엣지를 통해 movedVertex 정점으로 이동해 왔다고 가정함 int movedVertex = edge.destVertex; int movedDist = edge.distance; // movedVertex에 더 작은 비용으로 왔던 적이 있다면 살펴볼 필요가 없음 if(movedDist > dists[movedVertex]) continue; // movedVertex과 연결된 엣지를 탐색 : 뻗어나가기 for(int i = 0; i < graph[movedVertex].size(); i++){ // connectedEdge = movedVertex와 연결된 엣지 Edge connectedEdge = graph[movedVertex][i]; // movedVertex와 엣지로 연결된 다른 정점 int nextVertex = connectedEdge.destVertex; // nextDist = movedVertex까지 오는 데 쓰인 거리 + 그 정점과 연결된 다른 정점까지의 거리 int nextDist = movedDist + connectedEdge.distance; // 지금 구한 거리가 최소값이라서 갱신해야 하는 경우 if(nextDist < dists[nextVertex]){ // edge -> connectedEdge를 거쳐 이동한 거리로 갱신 dists[nextVertex] = nextDist; // 이 엣지를 이용해 다른 노드로 갈 수 있도록 큐에 push myPQueue.push(Edge(nextVertex, nextDist)); } } } for(int i = 2; i <= vertexSize; i++){ if(dists[i] != INT_MAX) cout << i << " : " << dists[i] << "\n"; else cout << i << " : impossible" << "\n"; } return 0; }
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
3번 진약수의 합
코드가 다음과 같을때 #include <iostream> using namespace std; int main() { int n, sum = 0; cin >> n; int last_measure = (n / 2); for (int i = 1; i < last_measure; i++) { if (n % i == 0) { cout << i << "+"; sum += i; }; }; cout << last_measure; cout << "=" << sum + last_measure; return 0; }; n = 홀 수 값인 경우 정상적으로 작동하지 않으나 자동 채점기로는 100% success가 출력 됩니다. 확인 부탁드립니다~ 강의 너무 잘듣고 있습니다 감사합니다 :)
- 해결됨it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
sum을 전역 변수로 잡는 구현
안녕하세요 선생님. 67번 질문드립니다. 전역변수의 값은 시스템 스택에 있는 매 스택 프레임 단계마다 다를 테니, 관리만 잘 한다면 sum을 매개변수로 잡는 구현과 다르지 않을 것 같아서 그렇게 하고 있는 중입니다. 하지만 이 방법이 나중으로 갈수록 좋지 않은 습관일까요? 아니면 속도 측면에서 약간의 불이익이 있을까요? 전역변수는 조금 다르게 저장된다고 배운 기억이 납니다. #include <iostream> #include <limits> using namespace std; int map[21][21]; bool check[21]; int target; int sum; int minVal = INT_MAX; int numOfVertices, numOfEdges; void DFS(int vertex){ if(vertex == target){ if(sum < minVal) minVal = sum; return; } else{ for(int i = 1; i <= numOfVertices; i++){ if(map[vertex][i] != 0 && check[i] == false){ sum += map[vertex][i]; check[vertex] = true; DFS(i); sum -= map[vertex][i]; check[vertex] = false; } } } } int main(int argc, char** argv) { // freopen("input.txt", "rt", stdin); cin >> numOfVertices >> numOfEdges; target = numOfVertices; for(int i = 0; i < numOfEdges; i++){ int source, dest, weight; cin >> source >> dest >> weight; map[source][dest] = weight; } check[1] = true; DFS(1); cout << minVal; return 0; }
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
res=res*10+(a[i]-48)
안녕하세요 항상 강의 잘 듣고 있습니다. 6번 숫자만 추출 문제에서 res의 값을 구하기 위해서 res=res*10+(a[i]-48) 이라는 식을 이용했는데 이런 식을 구하기 위해서는 수학적인 방법이 있는 건가요?? 어떻게 이런 식을 생각하셨는지 궁금합니다.
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
d(1,2)가 두번 비교 한다고 하셧는데 d(1,1)에서 한번 d(2,2)에서 한번 이라는 뜻인가요??
궁금합니다.
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
cin으로 입력 받을 시 마지막 숫자가 안받아집니다.
안녕하세요 ! 이 문제에서 입력을 cin으로 받아 a vector에 저장하는 코드를 짰는데 마지막 숫자가 안받아지는 에러가 납니다. 코드는 다음과 같습니다. int n, k,; cin >> n >> k; vector<int> a(n); for (int i=0; i<n; i++) { cin >> a[i]; } 확인해보니 for문의 마지막바퀴에 들어가긴 들어가는데 cin이 안됩니다. 제 컴퓨터의 오류인가요 ..? 확인해주시면 감사하겠습니다.
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
65번 문제 질문이 있습니다.
선생님의 강의를 보기 전, 아래와 같이 스스로 답을 작성해보았습니다. 첫번째 input case의 경우, 답이 1로 나와 오답이 나와버렸는데요, 아래에서 어떤 부분이 잘못됐는지 설명을 듣고싶습니다. #include <iostream> #include <vector> #include <algorithm> using namespace std; int arr[10][10], ans = 0, ny = 0, nx = 0; int my[4] = {1,0,-1,0}; int mx[4] = {0,1,0,-1}; bool check[10][10] = {false,}; bool track(int y, int x){ if(y<1||y>7||x<1||x>7||check[y][x]||arr[y][x]==1) return false; return true; } void dfs(int y, int x){ if(y==7&&x==7){ ans++; } else{ for(int i=0; i<4; i++){ ny = y+my[i]; nx = x+mx[i]; if(track(ny,nx)){ check[ny][nx] = true; dfs(ny,nx); check[ny][nx] = false; } else continue; } } } int main(void){ ios_base::sync_with_stdio(false); cin.tie(NULL); for(int i=1; i<=7; i++){ for(int j=1; j<=7; j++){ cin >> arr[i][j]; } } check[1][1] = true; dfs(1,1); cout << ans << "\n"; return 0; }
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
5:37초에
소수 구하는 문제인데 j*j 이거 지금 약수의 개수 구하는 알고리즘 아닌가요..?
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
LIS 코드 오류
안녕하세요 ! 수업을 듣다가 코드 오류를 발견한 것 같아 질문을 드립니다. LIS 코드를 짤 때 i=2 부터 도는 for문 안에서 res보다 dy[i]가 크면 res를 dy[i]로 바꿔주는 코드를 삽입했는데, 이렇게 할 경우 만약 n이 1이면 res를 0으로 초기화했기 때문에 답이 1이 되어야 하지만 0이 나오게 됩니다. 따라서 res를 1로 초기화를 하거나 n이 1일 때 예외처리를 해주는 코드를 작성해야 하는 것이 맞다고 생각합니다.
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
26번 : 병합정렬 스타일의 코드
안녕하세요 선생님. 강의 잘 듣고 있습니다. 아래는 채점기에서 100점을 받은 제 정답 코드입니다. 병합 정렬 스타일의 코드는 이런 느낌일까요? #include <iostream> #include <deque> #include <vector> using namespace std; int main(int argc, char** argv) { // freopen("input.txt", "rt", stdin); // init int n; cin >> n; vector<int> arr(n); vector<int> res(n, 1); deque<int> mydeque; for(int i = 0; i < n; i++) cin >> arr[i]; // logic for(int i = 0; i < n; i++){ // 1. deque가 빈 경우 맨 앞에 삽입 if(mydeque.empty()) mydeque.push_front(arr[i]); // 2. deque의 맨 앞에 있는 원소보다 현재 값이 더 작은 경우 맨 앞에 삽입 else if(mydeque.front() >= arr[i]){ res[i] += mydeque.size(); // deque의 사이즈만큼 정답 배열에 더함 mydeque.push_front(arr[i]); } // 3. deque 안에서 알맞은 위치를 찾아감 else if(mydeque.back() >= arr[i]){ int cnt = 0; deque<int>::iterator it = mydeque.end(); it--; while(*it >= arr[i]) { it--; cnt++; } it = mydeque.insert(++it, arr[i]); // 현재 it에 1을 더해야 알맞은 위치 res[i] += cnt; } // 4. deque의 마지막 원소보다 현재 값이 더 큰 경우 맨 뒤에 삽입 else mydeque.push_back(arr[i]); } for(int i = 0; i < n; i++){ cout << res[i] << " "; } return 0; }
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
질문있습니다.
1,2,4,5번 문제는 맞는데 왜 3번만 틀렸다고 할까요..? #include<stdio.h> int num[100001]; int main(){ int i, n, temp, cnt=0, max=-214700; //freopen("input.txt","rt", stdin); scanf("%d",&n); for(i=0; i<n; i++){ scanf("%d",&num[i]); } temp=num[0]; //배열의 첫번째요소를 임시로 넣음 for(i=0; i<n; i++){ if((num[i]-temp)>=0){ //이전의 요소와 뺄셈을 했을때 0보다 크거나 같으면 증가했다 취급함. cnt++; temp=num[i]; //다음반복을 위해서 현재요소를 임시값으로 지정 } else{ //이전의 요소와 비교했을때 값이 작으므로 감소했다 취급. if(max<cnt){ //증가가 끝났으니 max값 최신화 max=cnt; } cnt=1; temp=num[i]; //다음반복을 위해서 현재요소를 임시값으로 지정 } } printf("%d",max); return 0; }
- 미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
왜 n+1개로 만든건지 모르겠어요!
제목 그대로 질문입니다~