월 33,000원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
1-O 코드 질문입니다.
안녕하세요 큰돌님! 강의 재미있게 잘 듣고 있습니다 ㅎㅎ1-O번을 혼자 풀어서 맞추긴 했는데... 큰돌님 풀이 방식이랑은 좀 다르기도 하고, while문을 중첩해서 쓴 게 시간복잡도 때문에 마음에 걸려서요. - 코드 : http://boj.kr/a5eb7d7c669c408882d3004546fb537d저 같은 경우는 아래와 같은 방식으로 생각하고 구현하였습니다. 1. 입력범위를 먼저 보고 ( 1 <= n <= 10000) 2. 1, 11, 111, 1111을 제외하고는 맨 뒷자리가 1이 나오는 n의 값은 3, 7, 9 밖에 없다는 걸 깨달음 3. 나눗셈을 할때 나머지에 10을 곱해서 다음 자리수에 더해 다시 나눠서 계산하는 방식을 차용. 다시 말해 나눗셈을 할 때, 윗자리부터 몫과 나머지를 구하고, 나머지를 윗자리 몫을 구하고 남은 나누어지는 수에 더해서 다시 나누는 방식을 사용하기로 함. (배수이면 언젠간 나누어 떨어지므로)4. 코드상으로 시간 복잡도는 좋지 않아보이지 않았지만, 주어진 범위내에서는 111...11 자리수가 20이 넘어가더라도 한번의 테스트 케이스에서 대략 20번만 수행하면 되므로 그대로 구현해보았음. 혹시 이런 경우에 테스트 케이스를 맞췄더라도, 시간 복잡도를 고려해서 더 나은 방법을 고민해보는게 좋을까요?
- 해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
1-D 다른방법 질문있습니다!
안녕하세요 선생님! 처음 문제 풀때 reverse가 기억이 안나서 이렇게 해서 풀어봤는데 devc++에서는 제대로 나오는데 백준에서는 Segmentation fault 오류가 뜨는데 제가 혹시 메모리 인덱스를 잘못 접근한건지 아니면 다른 오류인지 궁금합니다!http://boj.kr/89002741edf34694a3293bfee22b2e0d
- 미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
3-L 'a'와 'A'일때의 차이
항상 질 좋은 답변 감사드립니다. 문제코드: https://www.acmicpc.net/source/75348635 질문은 다음과 같습니다. if (alpha[board[ny][nx] - 'a'] != 0) continue;alpha[board[ny][nx] - 'a'] = 1;dfs(ny, nx, cnt + 1);alpha[board[ny][nx] - 'a'] = 0; 에서 'a'일때는 정답처리가 안되지만'A'일때는 정답처리가 되는 이유가 궁금합니다. 제가 생각하기에는 대문자의 아스키코드가 'a'보다 작기때문에 음수가 돼서 정답처리가 안되는 것으로 생각하는데 이렇게 생각하면 컴파일 자체가 안되어야 한다고 생각하기때문에 질문드립니다. 감사합니다. 김지성 올림
- 미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
6-C 질문있습니다
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.안녕하세요 항상 강의 잘보고 있습니다!http://boj.kr/abba975d09e94f2ca5ed26ec25a96886문제를 이런식으로 풀었는데 rets = min(rets,min)으로 했을 경우에는 틀리고 , rets = min으로 했을 경우에는 정답 처리가 됩니다. 혹시 min으로 하면 반례가 발생하는 경우가 있을까요?
- 미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
sort에서 쓰는 cmp함수에 질문이 있습니다.
http://boj.kr/8d65e8a10d10408285809b81032c7b17안녕하세요 강사님. 좋은 수업 잘 듣고 있습니다.제가 이 코드에서 처럼 sort에 사용되는 cmp를 정의했는데, 제 컴퓨터에서는 잘 돌아가는데 boj에서는 runtime error(segmentation fault)가 발생합니다. 그래서 cmp를 이렇게 바꾸면bool cmp(pair<int, int> p1, pair<int, int> p2) { if (p1.second == p2.second) return p1.first < p2.first; return p1.second < p2.second; }잘 돌아갑니다. 왜 첨부한 링크의 cmp처럼 코드를 쓰면 segmentation fault가 발생하는지 궁금합니다. 감사합니다.
- 미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
플로이드 워셜 알고리즘 질문있습니다.
안녕하세요 강사님, 강의 잘 듣고 있습니다.플로이드 워셜의 반복문 순서에 대해 질문드리고 싶습니다.흔히 경유지 노드를 k로 두고(k, i, j) 순으로 반복문을 구현하는데,k가 i와 j 사이에 들어가면 안 되는 명쾌한 이유가 무엇인가요?
- 미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
벡터 선언할 때 질문이 있습니다
안녕하세요 큰돌님! http://boj.kr/fedde0e4bf064dc4b05484aa6d98848e 기존에 있던 main 함수에서 선언하는for (int i = 1; i < 4; i++)v.push_back(i);이것을 주석처리하고전역에서vector<int> v{1, 2, 3};이렇게 하는 게 더 간단해보여서 해봤는데 오류가 뜹니다..이런 오류가 뜨는 이유가 궁금합니다원래는 run code 버튼 눌러서 실행했었는데c++ % g++ -std=c++11 -Wall a.cpp -o test.out로 컴파일 하니까 해결됐습니다..제 c++ 버전이 14라서 그런 것 같은데 전역에서 벡터를 vector<int> v{1,2,3}; 이렇게 선언하려면 무조건 컴파일을 c++ % g++ -std=c++11 -Wall a.cpp -o test.out 이렇게 해야할까요..?c++ % g++ -std=c++14 -Wall a.cpp -o test.out 했을때도 실행이 안 됐었습니다참고로 맥북m1입니다!
- 미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
2-b for과 while
안녕하세요 선생님 저는 2-b문제를 두가지 방법으로 풀었는데 맞왜틀이라 질문드립니다. 첫번째 코드: https://www.acmicpc.net/source/75257463두번째 코드: https://www.acmicpc.net/source/75257408첫번째 코드와 두번째 코드의 차이는 k를 while로 돌리느냐, for로 돌리느냐 차이입니다. 첫번째 코드에서 while로 돌렸고 틀렸다고 나오는데, while이 어떤 문제로 틀렸다고 나오는걸까요? 결과물은 똑같은거같은데..
- 미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
하나만 더 질문하겠습니다.
http://boj.kr/d5416161871e4bf3bdf3badcbae8c77c벡터를 이용해서 풀어보았는데 어떤 부분에서 예외처리가 부족한지 못찾고 있습니다.루트 노드를 삭제할 때, 중간 노드를 삭제할 때, 리프 노드를 삭제할 때 3가지 확인하였고, 루트노드가 0번이 아닐 수 있는 것도 확인했습니다. 어떤 반례가 있을까요?
- 해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
5-C 시간초과 질문있습니다.
먼저 강사님이 5-A에서 설명하신 코드 대로 똑같이A,C를 풀 경우 맞습니다가 되고A에서 저만의 방식으로 문제 푼 것에 대해서는 맞았다고가 되는데C에서도 똑같이 저만의 방식 --> A에서 푼 방법으로 했을때는 시간초과가 뜹니다혹시 어떤식으로 바꿔야 시간초과를 해결할 수 있을까요?http://boj.kr/df57741592ee44f8861e0ed09227b476
- 미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
8-B) 시간 복잡도 질문
안녕하세요 항상 강의 잘 듣고 있습니다!이 문제를 처음에 접근할 때 문제 하나를 클리어 할 수 있다면 상태값 STR , INT를 변화하면서 재귀를 도는 로직을 생각했습니다. 그러니 당연히 상태값 (STR,INT)이 겹치는 부분이 있고 DP로 풀면 효율적이겠거니 생각했는데요.. 아쉽게도 조금 틀렸지만 ㅜㅜ선생님이 0~1000, 1000~0 딱봐도 많다! 하셨던게1000^50을 말씀하신걸까 궁금증이 생겨서 질문드립니다.
- 미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
알고리즘 교안 32p
안녕하세요 선생님! 알고리즘 공부를 이제 막 시작한 학생입니다 😀 다름이 아니라 강의 중에 보여지는 알고리즘 교안과 제공해주신 알고리즘 교안이 차이가 있는 것 같아서 질문드립니다.혹시 강의 중에 보여지는 교안은 어디서 다운받는지 알려주실 수 있을까요..? <강의에 보여지는 교안> <제공해주신 교안>
- 미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
5-T 질문, 시간초과 (moveShark)
오래 걸렸지만, 혼자 풀어서 정답처리가 되었는데,모듈러 연산으로 moveShark를 한것이 아니고, 한 칸 한 칸 이동하는 방식이었습니다.운 좋게 통과한 것 같네요. #include <bits/stdc++.h> using namespace std; int R, C, M; vector<vector<tuple<int, int, int>>> B; void moveShark(vector<vector<tuple<int, int, int>>>& B){ vector<vector<tuple<int, int, int>>> tempB = B; vector<vector<int>> visited(R+1, vector<int>(C+1,0)); for(int i = 1 ; i <= R; ++i){ for(int j = 1; j <= C; ++j){ int speed = get<0>(B[i][j]); int delta = get<1>(B[i][j]); // d:up(1), d:down(2), d:right(3), d:left(4) int size = get<2>(B[i][j]); if (size != 0){ if (visited[i][j] == 0) tempB[i][j] = {0,0,0}; if (delta == 1){ int s = i; int mov = -1; int sd = speed; while(sd > 0){ if ((s+mov >= 1) && (s+mov <= R)) s = s+mov; else{ s = s-mov, mov *= -1;} if ((s == 1) || (s == R)) mov *= -1; sd--; } if (visited[s][j] == 0 ||get<2>(tempB[s][j]) < size){ if (mov == -1) tempB[s][j] = {speed, 1, size}; else tempB[s][j] = {speed, 2, size}; visited[s][j] = 1; } } else if (delta == 2){ int s = i; int mov = 1; int sd = speed; while(sd>0){ if ((s+mov >= 1) && (s+mov <= R)) s = s+mov; else s = s-mov, mov *= -1; if ((s == 1) || (s == R)) mov *= -1; sd--; } if (visited[s][j] == 0 || get<2>(tempB[s][j]) < size){ if (mov == -1) tempB[s][j] = {speed, 1, size}; else tempB[s][j] = {speed, 2, size}; visited[s][j] = 1; } } else if (delta == 3){ int s = j; int mov = 1; int sd = speed; while(sd>0){ if ((s+mov >= 1) && (s+mov <= C)) s = s+mov; else s = s-mov, mov *= -1; if ((s == 1) || (s == C)) mov *= -1; sd--; } if (visited[i][s] == 0 || get<2>(tempB[i][s]) < size){ if (mov == -1) tempB[i][s] = {speed, 4, size}; else tempB[i][s] = {speed, 3, size}; visited[i][s] = 1; } } else if (delta == 4){ int s = j; int mov = -1; int sd = speed; while(sd>0){ if ((s+mov >= 1) && (s+mov <= C)) s = s+mov; else s = s-mov, mov *= -1; if ((s == 1) || (s == C)) mov *= -1; sd--; } if (visited[i][s] == 0 || get<2>(tempB[i][s]) < size){ if (mov == -1) tempB[i][s] = {speed, 4, size}; else tempB[i][s] = {speed, 3, size}; visited[i][s] = 1; } } } } } B = tempB; } int fishShark(vector<vector<tuple<int, int, int>>>& B, int c){ int size = 0; for(int i = 1; i <= R; ++i){ size = get<2>(B[i][c]); if (size != 0){ B[i][c] = {0,0,0}; break; } } return size; } void debug(){ for(int i = 1; i <= R ; ++i){ for(int j = 1; j <= C ; ++j){ cout << get<0>(B[i][j]) << "," << get<1>(B[i][j]) << "," << get<2>(B[i][j]) << "\t" ; } cout << endl; } } int main(){ cin >> R >> C >> M; B = vector<vector<tuple<int, int, int>>>(R+1, vector<tuple<int, int, int>>(C+1, {0,0,0})); int r, c, s, d, z; for(int i =0 ; i < M ; ++i){ cin >> r >> c >> s >> d >> z; B[r][c] = {s, d, z}; } long long ret = 0; for(int i = 1; i <= C ; ++i){ // cout << i << "th" << endl; // debug(); ret+=fishShark(B, i); // cout << "SZ: " << ret << endl; moveShark(B); } cout << ret; return 0; }
- 미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
5-B stack 질문있습니다
98퍼에서 틀렸다고 뜨는데 반례를 도저히 못찾겠어서 질문 남겨봐요!http://boj.kr/976bc09df4c24ac3bb144e15767bdf41
- 미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
5-B erase풀이법 질문 있습니다.
안녕하세요 선생님 먼저 시간 복잡도에 관해서 질문이 있는데왜 이중 for문으로 100만 X 100만이 무식하게 풀었을 때의 시간복잡도인지 잘 모르겠습니다. 두번째로 최대의 시간 복잡도일때가CC....CC444..44 (각 50만개씩 일때)C4를 폭발 하는게 최대가 아닌가요 ? 마지막으로http://boj.kr/6586bfc6badd4b5b9d1653b7a2462d1a이게 왜 시간초과인지 잘 모르겠습니다.
- 미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
5-B 시간초과
http://boj.kr/11f4fe5e2b174361968323f94b94f219http://boj.kr/8b939f4ade88488f89afc3b312f8867d위 2개의 코드의 차이점은 +=사용 유무인데 res+=c;를썻을때는 통과가 되었지만 res=res+c를 썻을때는 시간초과가 났습니다. +=유무가 이렇게 유의미한 차이를 만들어내는 건가요?? 왜 이런지 이유가 궁금합니다.
- 미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
시간복잡도 관련 질문 드립니다
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요.강의에서는 시간복잡도가 13 combi k * 100 이라고 말씀하셨는데, 제 생각을 정리하자면 다음과 같습니다. 모든 치킨집 중에 사용가능한 치킨집을 뽑는다. 그리고 뽑은 경우의 수마다 모든 집들과의 최소거리를 구한다. 이 때 만일 치킨집을 3개 뽑았고 모든 집의 갯수가 2개라면 한집마다 3개의 치킨집과의 거리를 비교해야한다.따라서 이 로직은 문제 조건에 따라 13 combi k * 100 * k 의 시간복잡도를 갖는다.그래서 제 생각에는 13 combi k * 100 * k 의 시간복잡도를 가질 거 같은데 혹시 실수한 부분이 있을까요?감사합니다.
- 미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
3-E 질문
for(int i=0;i<6;i++){ int na = max(0,a - S[i][0]); int nb = max(0,b - S[i][1]); int nc = max(0,c - S[i][2]); if(visited[na][nb][nc]) continue; visited[na][nb][nc] = visited[a][b][c] + 1; Q.push({na,nb,nc}); }이 코드에서 for문을 통해 6가지 경우를 따질 경우, 6가지 경우를 visited[][][] 이 하나의 배열에서 따지면 각 경우에서 값들이 안 겹치는 이유가 뭔가요..? 저는 처음에 값이 겹칠 경우를 고려하여 배열을 다 따로 해야된다고 판단했네요 ㅠㅠ
- 해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
1-N 질문 드립니다
안녕하세요 큰돌님 😀1-N 백준 1629 문제에서 제공해주신 코드에#include<bits/stdc++.h> using namespace std; typedef long long ll; ll a, b, c; ll go(ll a, ll b){ if(b == 1) return a % c; ll ret = go(a, b / 2); ret = (ret * ret) % c; if(b % 2)ret = (ret * a)% c; return ret; } int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); cin >> a >> b >> c; cout << go(a, b) << "\n"; return 0; }여기에서if(b % 2)ret = (ret * a)% c;원래 공식에 대입하면 이 부분에 (ret * a % c) % c 가 들어오는 것이 맞지 않나요..? 어떻게 이렇게 되는지 궁금합니다 ㅜㅜgo(2, 3) 이라고 할 때,이렇게 되어서if(b % 2)ret = (ret * a)% c;이 아니라,if(b % 2)ret = (ret * (a % c))% c;가 된다고 생각했는데 설명해주시면 감사합니다..ㅜㅜ 다른 질문에 답변 달아주신 내용 확인해서 이해하였습니다~!!
- 해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
2-E 분할정복 반례를 찾지 못하겠습니다.
안녕하세요 큰돌님2-E 문제에서 반례를 찾지 못해서 질문드립니다.다음과 같이 주어진 배열을 재귀적으로 나누어서배열 크기가 1일때부터 string으로 다시 합치는 코드입니다.#include<bits/stdc++.h> using namespace std; string a[64][64]; int n, ny, nx; string ret, temp; int dy[] = {0, 0, 1, 1}; int dx[] = {0, 1, 0, 1}; string four(int num, int y, int x){ if(num == 1){ return a[y][x]; } else{ string s = ""; for(int i = 0; i < 4; i++){ ny = y + dy[i] * (num / 2); nx = x + dx[i] * (num / 2); s += four(num / 2, ny, nx); } if(s == "0000") return "0"; else if(s == "1111") return "1"; else return "(" + s + ")"; } } int main(){ cin >> n; for(int i = 0; i < n; i++){ cin >> temp; for(int j = 0; j < n; j++){ a[i][j] = temp[j]; } } if(n == 1) { ret = "(" + a[0][0] + ")"; cout << ret << '\n'; } else{ ret = four(n, 0, 0); if(ret == "0" || ret == "1") ret = "(" + ret + ")"; cout << ret << '\n'; } return 0; }