묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
알고리즘 교안 32p
안녕하세요 선생님! 알고리즘 공부를 이제 막 시작한 학생입니다 😀 다름이 아니라 강의 중에 보여지는 알고리즘 교안과 제공해주신 알고리즘 교안이 차이가 있는 것 같아서 질문드립니다.혹시 강의 중에 보여지는 교안은 어디서 다운받는지 알려주실 수 있을까요..? <강의에 보여지는 교안> <제공해주신 교안>
-
해결됨2주만에 통과하는 알고리즘 코딩테스트 (2024년)
2강 3020 시간초과
안녕하세요! 2강 3020 백준에서 풀어보니 시간초과가 뜨더라구요그래서 선생님 답안지랑 비교해보니 맨위에 import sysinput = sys.stdin.readline를 쓰신걸 확인하고 추가해서 통과했습니다.찾아보니까 input보다 성능이 좋다고 하는데 그럼 모든 문제에 풀때 입력 방식으로 넣으면 좋은걸까요 ?
-
해결됨2주만에 통과하는 알고리즘 코딩테스트 (2024년)
2강 14252 힌트
안녕하세요 수업 잘듣고있습니다.궁금한 점이 있어 문의드립니다문제는 인접한수가 서로소일수 있도록 숫자를 추가해야하는 문제로 이해했습니다. 강의에서 숫자를 하나만 넣거나 두개를 넣거나 밖에 경우의 수가 없다고하셨는데 그 이유가 궁금합니다. 저도 이유가 궁금해서 찾아보긴 했는데 연속되는 바로 옆의 수를 추가해주면 되기 때문에 최대 2개의 수만 추가하면 된다고 보았거든요. 그런데 강의 자료의 힌트를 보면 2184, 2200 사이에 2185, 2199가 아닌 2195, 2199를 넣으면 된다고 해서 정확히 이해가 안되었어요 왜 3개 4개를 넣지 않고 두개까지만 넣어도 괜찮은걸까요? 무조건 두수 사이에 하나가 아니면 두개가 들어가면 조건을 만족하는 걸 실제 코테에서 어떻게 유추해야할지 감이 안잡히네요 ㅠ
-
미해결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이게 왜 시간초과인지 잘 모르겠습니다.
-
미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
배열 길이 n 질문
강의 내 소스 코드의 경우 주어진 배열의 갯수 n을 입력만 받고, 아예 사용 자체를 안하는데요..저게 해답이라고 할 수 있는건가요?사용을 안 할거라면, n을 입력받는 이유가 따로 있는건가요 기존 다른 답변들을 봤는데도, 그냥 해당 강의 소스를 확인해보라고만 하는데 말이죠
-
해결됨SQL 코딩테스트를 위한 첫 걸음
[Average Selling Price] 문제 테스트케이스 실패
코드select p.product_id, round((sum(u.units*p.price) / sum(u.units)),2) as average_price from Prices as p inner join UnitsSold as u on p.product_id = u.product_id where u.purchase_date between p.start_date and end_date group by p.product_id현재 inner join으로 코드를 작성해봤습니다. submit을 하고나니 아래와 같이 테스트케이스에 통과하지 못했습니다![ 문제 상황 ]테스트케이스를 확인해보니 Prices 테이블에 product_id가 3인 row가 있음inner join을 했으므로 3번에 대한 결과가 나오지 않음실제 결과값에는 3번도 포함되어야한다[ 궁금한 사항 ]결과를 만족하려면 left outter join을 사용해야할 것 같습니다. 하지만 어떻게 해야지 잘 적용할 수 있는지 감이 잘 안옵니다.left outer join을 활용한 풀이와 설명 부탁드립니다!
-
미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
프로그래머스 추천문제
안녕하세요 강의를 끝까지 거의 수강하고 프로그래머스 추천문제를 풀고있습니다.그런데 문제 추천 텍스트파일에 split함수쓰기라고 되어있는 문제가있는데C++에는 split기능이 없지않나요?? 파이썬에 대한 말씀이신지 궁금해서 질문드립니다.
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
5-B 시간초과
http://boj.kr/11f4fe5e2b174361968323f94b94f219http://boj.kr/8b939f4ade88488f89afc3b312f8867d위 2개의 코드의 차이점은 +=사용 유무인데 res+=c;를썻을때는 통과가 되었지만 res=res+c를 썻을때는 시간초과가 났습니다. +=유무가 이렇게 유의미한 차이를 만들어내는 건가요?? 왜 이런지 이유가 궁금합니다.
-
해결됨[파이썬/Python] 문과생도 이해하는 DFS 알고리즘! - 입문편
2644문제(촌수 구하기) 질문입니다.
1) 이 문제는 2차월 배열에 False로 초기화한다음 입력받은값만 True로 썼는데 이 문제도 메모리 낭비를 위해 빈 리스트에 넣어서 풀려면 어떻게 해야 할까요?? 2) 재귀(1)중간에 재귀(2)타고 여기서 재귀(3)타고 재귀(4)타서 값을 찾았을때 리턴을 했는데요 리턴을 했다고 해서 1,2,3번의 반복문을 break하는건 아니더라고요 어짜피 답은 찾았으니 시간낭비 방지를 위해 반복문을 돌지 않는방법이 있나요?
-
미해결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[][][] 이 하나의 배열에서 따지면 각 경우에서 값들이 안 겹치는 이유가 뭔가요..? 저는 처음에 값이 겹칠 경우를 고려하여 배열을 다 따로 해야된다고 판단했네요 ㅠㅠ
-
미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
이 코드는 왜 YES만 Success인가요?
안녕하세요.선생님.영상도 참고하면서 제 방식대로 조금 짜봤는데 잘 안되서 여쭤봅니다.#include <bits/stdc++.h> using namespace std; int n, res = 0; int a[101]; int main() { cin >> n; vector<int> ch(n); for(int i = 0; i < n; i++) { cin >> a[i]; } for(int i = 0; a[i]!='\0'; i++) { res = abs(a[i]-a[i+1]); if( res > 0 && res < n && ch[res] == 0 ) { ch[res] = 1; } } // 이 부분입니다. for(int i = 0; ch[i] != '\0'; i++) { if(ch[i] == 0) { cout << "NO"; return 0; } } cout<<"YES"; return 0; }3번째 for문에서 i < n을 하면 NO부분에서만 success가 뜨고 위와 같이 하면 Yes부분에서만 Success가 뜹니다.도움부탁드리겠습니다.감사합니다.
-
해결됨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;가 된다고 생각했는데 설명해주시면 감사합니다..ㅜㅜ 다른 질문에 답변 달아주신 내용 확인해서 이해하였습니다~!!
-
해결됨자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
크레인 인형뽑기 테스트 케이스
크레인 인형뽑기 테스트케이스 5번 잘못된거 아닌가요. 문제에는 바구니 아래부터 차곡차곡 쌓여있다고 되어 있는데 테스트 케이스는 인형 중간에 빈칸이 있네요.
-
해결됨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를 입력해도 정답처리가 되었습니다. 생각해보면 반드시 방문할 수 없는 지점을 방문하는 형태가 되어 오답이 나와야 할 것 같은데 정답이 나와 질문드립니다!먼저 방문을 하고 어차피 이동을 못하니까 결과가 같을 거라고 예상은 되지만 큰돌님의 답변이 궁금합니다!