묻고 답해요
131만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
43번 배열 크기 문제
문제에는 첫째 줄에 자연수 N(1≤N≤1,000)이라고 나왔습니다만채점 프로그램의 in3~in5까지의 n 입력값은 1000을 넘어갑니다 (100,000) a의 배열의 사이즈는 1001(1000개)인데 n을 100,000으로 받아도 문제 없이 정답이 잘 나옵니다 배열의 사이즈를 넘어가는데 정답이 잘 나오는 이유를 모르겠습니다
-
미해결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
-
해결됨[파이썬/Python] 문과생도 이해하는 DFS 알고리즘! - 입문편
그래프 짤 때 adjacency matrix vs adjacency list
안녕하세요 정말 강의 잘 듣고 있습니다. 저는 코딩을 영어로 공부하고 있는데 지금까지 봤던 문제들 중에서 graph 를 짜는 부분에서 adjacency matrix 와 adjacency list 두 종류를 쓰셨는데 강의에서 말씀하신 부분을 보면 모든 면에서 adjacency list 가 더 낫지 않나요? 특히나 메모리를 적게 쓰는 부분과 더 짜기가 쉽다는 부분에 있어서요. adjacency marix 가 adjacency list 보다 선호되는 케이스가 혹시 있는지 궁금해서 질문 드립니다. 그리고 adjacency list 를 만드실 때 리스트 안에 리스트를 만드는 설정을 하셨는데 혹시 해시맵에 리스트를 넣어서 하는 게 더 보편적인건가요?추가) 아 그리고 visited 는 list 에 False 로 채워넣는것 대신에 set() 으로 하는 게 더 메모리에 좋을까요?
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
8-B) 시간 복잡도 질문
안녕하세요 항상 강의 잘 듣고 있습니다!이 문제를 처음에 접근할 때 문제 하나를 클리어 할 수 있다면 상태값 STR , INT를 변화하면서 재귀를 도는 로직을 생각했습니다. 그러니 당연히 상태값 (STR,INT)이 겹치는 부분이 있고 DP로 풀면 효율적이겠거니 생각했는데요.. 아쉽게도 조금 틀렸지만 ㅜㅜ선생님이 0~1000, 1000~0 딱봐도 많다! 하셨던게1000^50을 말씀하신걸까 궁금증이 생겨서 질문드립니다.
-
미해결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가 뜹니다.도움부탁드리겠습니다.감사합니다.