월 33,000원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결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; }
- 미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
질문 있습니다.
http://boj.kr/19b569e6243a4c24b597ed31b2dbdbc3테스트케이스 통과하고, 질문게시판을 통해 루트노드만 있을 때 예외처리까지 처리했지만 제출하면 바로 실패로 뜨는데 어떤 반례가 있을까요?
- 미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
방문할 수 없는 지점 질문
http://boj.kr/92388f57a46746da910101a9b3400b69문제를 풀고 정답이 되어서 답안을 확인하는데 overflow 조건 체크 후 방문가능한 지점인지 체크하는 과정에서 제가 ny,nx 대신 y와 x를 입력해도 정답처리가 되었습니다. 생각해보면 반드시 방문할 수 없는 지점을 방문하는 형태가 되어 오답이 나와야 할 것 같은데 정답이 나와 질문드립니다!먼저 방문을 하고 어차피 이동을 못하니까 결과가 같을 거라고 예상은 되지만 큰돌님의 답변이 궁금합니다!
- 미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
2-S 자바스크립트 코드 질문있습니다!
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. http://boj.kr/4407e944ea384e408f615a6ef1ca8be5http://boj.kr/b5895e45632846f2b6f7448082492dda안녕하세요.2-S 문제를 자바스크립트로 구현해보았는데 첫번째 링크의 코드와 두번째 링크 코드의 차이는 그래프를 맵으로 구현한 것과 배열로 구현한 것 차이라고 생각합니다.맵 자료형의 Value에 해당하는 부분도 배열로 구현했기에 두 코드의 시간복잡도가 동일하다고 생각했는데 첫번째 링크는 통과하고 두번째 링크는 시간초과가 나옵니다.맵으로 구현한 코드가 O(V+E)라면 배열로 구현한 코드가 O(V*E)라서 시간초과가 나는걸까요??감사합니다!
- 미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
질문 있습니다.
항상 감사드립니다 선생님!
- 미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
3-L 질문 있습니다!
안녕하세요 선생님, 항상 강의 잘 보고 있습니다!!이 문제 답의 visited가 1차원 배열이냐, 2차원 배열이냐에 따라서 시간복잡도 차이가 3배이상 나더라구요.배열과 관련한 연산은 인덱스를 통한 참조와 삽입밖에 없는데 이렇게 차이가 많이 나는 이유가 뭘까요?2차원 배열을 사용해서 통과한 답 첨부해드립니다. 감사합니다.http://boj.kr/8e9b226e7708455da2bee2555f8403db
- 미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
영화수집 문제) 카운팅트리에서 궁금한게 생겼습니다.
인덱스를 음수로 사용할 수 없으니까 처음의 값들을m최대값 10만이니 10만1 이상의 값에 값을 할당하셨는데.그런데 10만2부터 사용하시고 10만1은 사용하시지 않으셨더라구요. 그래서 이해하는 과정에서 중요한건가 싶어서 10만도 해보고 10만1부터도 해보았습니다.예로update_idx = 100000Update(update_idx , 1);mp[temp] = update_idx--;이렇게 수정해보았습니다. 범위에 딱 맞으니까 10만개까지 딱 정보가 들어올 수 있게되는데sum에서 잠시 생각해보니 tree[0] 인덱스에 10만번째 정보가 들어올 것이라고 생각이 들어서요while(i>=0) 으로 바꾸어보았는데 .. (ㅋㅋ 왜 [1] 부터 하시라는지 알았습니다..) 당연히 무한루프를 돌았고다시 while(i>0)으로 수정했는데 정답이 떴습니다.사실 오답이어야 하는게 아닌가 싶어 질문드립니다.
- 해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
1-M 백준 3986 질문 드립니다
안녕하세요 큰돌님:)백준 3986 문제에 대해서 질문드리고 싶은 게 있습니다!http://boj.kr/00e868dc6fea4a5cbcb0048b32aed50b위의 코드와 같이 st.push(s[0]); 을 먼저 한 다음 j=1 부터 반복문을 시작하면 왜 21112 segmentation fault 오류가 나오는지 궁금합니다..ㅜㅜ 그리고 제가 1주차 문제를 풀고 있는데 거의 3개 중에 하나 꼴로 틀리고 어떨 땐 연속으로 계속 틀리는데강의를 들으면 설명을 잘해주셔서 이해안되는 부분 없이 전부 이해가 가긴 합니다.. 접근법을 배우는 거에 의의를 두고 틀려도 계속 진도 나가면서 풀고있기는 한데 자꾸 틀리니까 위축이 되어서요..ㅠㅠ지금처럼 꾸준히 진도 나가는 것이 맞을까요?? 제 수준에서는 다시 교안으로 돌아가야 하는지.. 모르겠습니다 조언해주시면 감사합니다..!마지막으로 선생님께서 올려주신 추천문제들만 복습해서 봐도 코테 마스터 할 수 있을까요..? ㅜㅜ 아니면 다른 문제들도 함께 겸해서 공부해야하는지 궁금합니다감사합니다.
- 미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
질문 있습니다.
처음 강의 들을 때에는 BFS, DFS기본 문제도 못풀었는데 풀었던 문제들 다시 풀어보고 또 풀어보면서 BFS, DFS, 조합 등에 익숙해지니 이런 문제들도 혼자 풀 수 있는 날이 오네요 ㅠㅠㅠhttp://boj.kr/9831abd022b2486f9421eb048c8ae62d제 나름대로 배웠던 지식들 활용해서 풀어봤습니다. 선생님 풀이보다 10ms정도 시간이 더 느린 것은 메모리를 복사하는 과정에서 늦어지는 것일까요?
- 해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
2 - L 어디가 틀린건지 모르겠습니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.http://boj.kr/479470df1029497d9df3d10d7ce3e633방식은 현재 골 넣은 시간을 입력 받고 원래 이기고 있던 상황이거나 상대가 골 넣었는데도 아직도 이기고 있는 상황에서 이전 시간과 현재 시간의 차이 만큼 팀의 승리 시간에 추가하는 방식입니다.두 팀의 골이 같아진 경우에는 마지막으로 골을 넣은 팀의 상대 팀의 승리 시간을 추가했습니다.마지막으로는 경기 종료 48분까지 이기고 있는 팀의 시간을 추가해서 출력했는데 예제 3번까지는 맞게 나오는데 제출해보면 틀리다고 나옵니다. 어디가 틀린 걸까요?
- 미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
M2 셋팅 관련하여 질문드립니다.
안녕하세요 선생님 알고리즘 교안 m2 초기 셋팅 관련하여 아래와 같이 질문드립니다.brew는 설치 완료 하였고 bits/stdc++.h 파일 생성에서 문제가 되는데요.아래과 같은 경로로 가서 코드 모두 복사하고 vi편집기를 빠져 나오게 되면 아래와 같이 파일 생성이 되지않습니다.이후 파일 생성이 되지 않아 다시 파일을 생성하려고 하면 스왑하라는 두번째와 같은 창이 뜨게됩니다.확인한번만 부탁드립니다.
- 해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
1주차 개념 #7. 문제로 연습하는 시간복잡도 Q5 강의 질문있습니다.
안녕하세요 수민님 ㅎㅎ해당 함수에서 시간복잡도가 어느정도 큰 주요 로직이라고 보시면 됩니다. 예를 들어#include<bits/stdc++.h> using namespace std; int N, cnt; void solve(int N){ cnt++; cout << cnt << '\n'; if(N == 0) return; for(int i = 0; i < 3; i++){ solve(N - 1); } return; } int main(){ cin >> N; solve(N); return 0; } 이 solve라는 함수에서 주요한 로직은 for(int i = 0; i < 3; i++){ solve(N - 1); } 이부분입니다.---------------------------------------------------최근 질문에 큰돌님께서 작성하신 답변을 제가 일부 가져왔습니다.여기서는 메인 로직 즉, 주요 로직이 반복문이라고 설명하셨는데, 강의 5:22초에는 메인 로직이 출력문이라 O(1)이라고 말씀하십니다. 강의내용과 질문게시판 답변 중 뭐가 맞는 건가요?