묻고 답해요
169만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
플루이드워셜 k i j 순서가 궁금합니다.
큰돌님 안녕하세요? 플루이드 워셜 푸는데 k i j 순서가 의미가 있나 궁금해서 질문 드리게 되었습니다. 저의 생각은 "모든쌍에 대해 계산하므로 k i j 의 순서는 별로 상관 없다" 입니다.그래서 코드를 이렇게 했더니 틀리더라구요? for(int k = 1;k<=n; k++) { for(int i = 1 ; i<=n;i++) { for(int j = 1 ; j<=n;j++) { if(dist[k][i]==1 && dist[i][j] ==1) dist[k][j]=1; else if(dist[k][i]== -1 && dist[i][j] == -1) dist[k][j]=-1; } } } 왜 큰돌님 해설 처럼 해야 하는지, 그리고 이 해설의 i k j? 순서로 해야하는지, 왜 그런지 차이가 궁금합니다.for(int k=1; k<=n; k++) for(int i=1; i<= n; i++) for(int j=1; j<= n; j++){ if(dist[i][k] == 1 && dist[k][j] == 1) dist[i][j] = 1; else if(dist[i][k] == -1 && dist[k][j] == -1) dist[i][j] = -1; }
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
8-A 질문있습니다
solve()함수가 이해가 가지 않습니다.이미 dp[경찰차 1의 위치][경찰차 2의 위치] = 최소값 으로 getSum()을 통해서 dp값을 구했는데 그럼사건의 시작인 2부터 시작해서 w+1까지 dp의 값을 비교해서 어떤 경찰차가 이동하는지만 구하면 되는데 왜 dp[i][b] + d(a, i) < dp[a][i] + d(b, i) 로 다시 d()함수로 경찰차와 사건의 위치를 다시 계산해서 또 더해서 비교하나요?
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
1-N 곱셈 코드 질문
http://boj.kr/8e0930f84de9404b8ff18b5733c4b88a큰돌님 제가 작성한 코드인데 계속 틀리는데이유가 나눠줘도 결국 수가 너무 커서 long long 범위를 넘어서서 그런 걸까요아니면 로직 자체가 틀린 걸까요 ..?
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
재귀 풀이 질문이 있습니다 선생님
Combi함수의 매개변수로 vector<int> & v가 있는데 v앞에 &기호를 붙이는 이유를 잘 모르겠습니다.
-
미해결김영한의 실전 자바 - 중급 2편
직접 구현하는 배열 리스트1- 시작의 MyArrayListV1 구현 질문이요
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]직접 구현하는 배열 리스트1- 시작의 MyArrayListV1 구현문제를 예외 처리하고 싶은데 아무리 해도 안돼는데 해결책좀 try { list.add("f"); System.out.println(list); } catch (ArrayIndexOutOfBoundsException e) { System.out.println("배열의 범위를 벗어났습니다"); System.out.println("예외 발생 위치: " + e.getMessage()); e.printStackTrace(System.out); }그리고 아래 MyArrayListV1에 이렇게 작성하면 되긴 돼는데 저는 유지보수를 위해서 try~catch를 하고 싶거든요. 그래서이렇게 질문 남겨요public void add(Object e) { if (size >= elementData.length) { // 배열이 가득 찼는지 체크 throw new ArrayIndexOutOfBoundsException("용량을 초과했습니다. 현재 크기: " + size + ", 최대 용량: " + elementData.length); } elementData[size] = e; size++; }
-
해결됨2주만에 통과하는 알고리즘 코딩테스트 (2024년)
백준 22988 번 문제
#include<iostream> #include <vector> #include <algorithm> using namespace std; int n, target; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); cin >> n >> target; vector<int>vec(n); for (int i = 0; i < n; i++) { cin >> vec[i]; } int cnt = 0; sort(vec.begin(), vec.end()); int l = 0, r = n - 1; float liq = target / 2.f; int remain = 0; while (l < r) { if (target == vec[r]) { r--; cnt++; continue; } int sum =vec[l] + vec[r]; if (sum >= liq) { l++; r--; cnt++; } else { l++; remain++; } } if (l == r) { remain++; } cout << cnt+(remain/3); return 0; }이렇게 코드 작성했는데 결과는 맞는데 왜 제출하면 틀렸다고 나올까요??
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
8-U 질문있습니다 :)
안녕하세요 선생님 🙂 아래는 선생님의 강의를 듣기 전에 풀었던 코드입니다.선생님과의 차이점을 보면 visited배열 사용여부 하나가 있는데요, visited배열을 사용하지 않아도 되는 이유가 궁금합니다. http://boj.kr/18b50706174c498b994332e99064c1e5
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
8-R 질문있습니다 :)
안녕하세요 선생님 🙂 공식만 이해하면 최단거리 알고리즘문제를 맞추는 것은 정말 쉬운 것 같습니다. 아래는 선생님의 강의를 듣기 전에 먼저 풀이해본 코드인데요, 시간복잡도 부분에서 선생님과 큰 차이가 있습니다. 선생님께서는 하나의 함수로 모듈화하여 풀이해주셨는데요, (1. 왔다), (2.갔다)가 하나의 모듈로 재사용될 수 있다는 것이 이해가 되지 않습니다. 1~N번 마을에 있는 학생들은 전부 X번 마을로 갑니다.X번 마을에 도착한 학생들은 다시 각자의 마을로 돌아갑니다. 위의 2가지 조건 중, 선생님의 풀이로 2번은 이해가 되는데요, 1번이 이해가 되지 않습니다. 선생님께서 말씀해주신대로, 1번 조건을 보면 최단거리를 시작하는 시작점이 없기 때문에 플로이드 와샬이 떠올랐습니다. 이 풀이를 다익스트라로 실현시키기 위해서는 1부터 N까지 for문을 돌려서 하나씩 다익스트라를 돌려주는 방법 밖에 없다고 생각했습니다. 위의 로직이 어떻게 선생님처럼 간단하게 구현이 되는지 알려주시면 감사하겠습니다! http://boj.kr/19e70b6a650d432591cbf701fd1e75eb
-
해결됨세계 대회 진출자가 알려주는 코딩테스트 A to Z (with Python)
백준 등급
안녕하세요. 다보지는 않았지만, 열심히 수강하고 있습니다 : ) 다름아니라 강의보던중에강사님 백준 등급이 어떻게 되시는지 호기심이 생겨 질문드립니다. 실례가 안된다면 알려주실 수 있나요?~세계 대회 진출자라고 하셔서 궁금하네요
-
미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
채점이 안되요...
제가 푼것도 넣어보고. 소스코드에 있던것도 넣어보고 했는데. 채점 폴더에 집어넣어도.. 저렇게 나오네요... 흠..;; 바탕화면에서 하고 있는데..
-
해결됨2주만에 통과하는 알고리즘 코딩테스트 (2024년)
추가 강의 순서
추가 강의 또한 순서대로 보는 것이 도움이 되나요?? 아니면 원하는 강의를 들어도 괜찮나요??
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
학습 방법 문의 드립니다!
안녕하세요, 큰돌님!현재 이직을 위해 코테 준비를 하려고 하는데, 평소 Java 만 사용하다보니 cpp 은 거의 모르는 상태 입니다. (재작년 이직 할 때 잠깐 강의 보면서 따라 쳤던 경험만 있습니다.) 예전에 큰돌님 강의 보면서 공부할 때는 교안은 따로 안보고 주차 별 문제 풀이만 계속 진행 했었는데요. 이번에는 조금 더 천천히 그리고 하나부터 제대로 공부해보려고 합니다. 그래서 커뮤니티에 선배님들이 남긴 글 보니까 교안을 먼저 1회독하고 시작하라고 하는데 어떤 교안을 말씀하는건지 헷갈려서요..이해한 바로는 10주차 알고리즘 교안(cpp 과 친해지기) 1회독 후 알고리즘 개념 교안 + 0주차 강의부터 쭉 진행하면 되는걸까요?
-
미해결입문자를 위한 코딩테스트 핵심(이론과 문제풀이) [Python]
두수의합 sorting 질문
강사님밑에 코드로 작성해도 괜찮은가요!? 잘보고있습니당!!def solution(nums, target): answer = [0]*2 nums.sort() n = len(nums) left = 0 right = n-1 sumV = nums[left] + nums[right] for _ in range(n): if sumV == target: answer = [nums[left], nums[right]] break elif sumV > target: right -= 1 sumV = nums[left] + nums[right] elif sumV < target: left += 1 sumV = nums[left] + nums[right] return answer
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
7-L 질문있습니다 :)
안녕하세요 선생님 🙂 DP에 가장 큰 약점이 있다고 생각했었는데요, 문제를 다시 반복하면서 풀다보니 어떤 경우에 DP 개념을 사용해야하는지 이제는 알 것 같습니다 ㅎㅎ 선생님 덕분에 실력이 크게 늘었습니다! 감사합니다 🙂 아래는 제 코드입니다. 정답을 맞췄고, 따지고보면 제 로직과 선생님의 로직 차이는 없지만 고민되는 부분이 있습니다.http://boj.kr/ddecf034ffd645bea03218ddefb81d38 예전에 같은 회사의 시험을 본 사람들의 후기글을 본 적이 있습니다. 참고로 이 회사는 서류제출을 하면 코딩테스트를 보고, 종합해서 서류심사를 하는 회사입니다. 어떤 사람은 6문제 중에 5문제를 맞췄는데 떨어졌고, 어떤 사람은 6문제 중에 3문제를 맞췄는데 면접을 봤다는 글을 본 적이 있습니다. 제가 생각한 이유는 아래와 같습니다. 코딩테스트를 잘봐도 제출한 서류에 문제가 있었을 수도 있다.최적 알고리즘을 선택하지 않아 효율적인 풀이가 아니었다.코드의 가독성이 좋지 않거나, 간결성이 부족하다. 위의 3가지 중에서 3번이 고민입니다. 선생님의 코드와 제가 방금 풀이한 코드를 비교해보면 제 코드가 1줄 더 많습니다. 좀더 딥하게 들어가보면, 1줄로 작성할 수 있는걸 2줄로 작성한 것이죠. 이런 것도 문제가 될 수 있는지 궁금합니다..!!
-
해결됨2주만에 통과하는 알고리즘 코딩테스트 (2024년)
(*문제 풀이)1090 테스트케이스 1번 C++
#include <iostream>#include <vector>#include <algorithm>#include <numeric>#include <string>using namespace std;int main(){ int answer = 0; int n; cin >> n; vector<pair<int,int>> pos(n); for (int i = 0; i < n; ++i) { cin >> pos[i].first >> pos[i].second; } vector<int> result(n,-1); // k번쨰 칸에 들어갈 경우 // 한 집을 정해서 최소 거리를 구한다 for (int i = 0; i < n; ++i) { vector<int> temp; for (auto p2 : pos) { int distance = abs(pos[i].first - p2.first) + abs(pos[i].second - p2.second); temp.push_back(distance); } sort(temp.begin(), temp.end()); int cnt = 0; for (int j = 0; j < n; ++j) { cnt += temp[j]; if (result[j] == -1) result[j] = cnt; else result[j] = min(cnt, result[j]); } } for (int i = 0; i < n; i++) { cout << result[i] << " "; } return 0;}안녕하세요, 해당 문제 C++로 풀어서 제출해보았는데 백준 1090문제에서 안돌아가서요. 제가 봤을 때 강의 노트 풀이랑 똑같은 것 같은데 무슨 문제가 있을까요?
-
미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
안녕하세요 강사님 정렬에 대해서 설명이 조금 더 듣고 싶습니다.
#include <queue> #include <iostream> #include <vector> #include <set> using namespace std; int N; vector<vector<int>> n; vector<int> ch; int main() { ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); FILE* fp; freopen_s(&fp, "input.txt", "rt", stdin); cin >> N; ch.resize(N, 0); for (int i = 1; i <= N; i++) { int a, h, w; cin >> a >> h >> w; n.push_back({ a, h, w }); } //sort(n.begin(), n.end(), [](const vector<int>& a, const vector<int>& b) { // return a[0] > b[0]; }); int max = 0; ch[0] = n[0][1]; for (int i = 1; i < N; i++) { int a1 = n[i][0]; int h1 = n[i][1]; int w1 = n[i][2]; int res = h1; for (int j = 0; j < i; j++) { int a2 = n[j][0]; int h2 = ch[j]; int w2 = n[j][2]; if (a1 < a2 && w1 < w2) { if (h1 + h2 > res) { res = h1 + h2; } } } ch[i] = res; if (res > max) { max = res; } } cout << max; } 강사님께서도 정렬을 먼저 하고서 알고리즘의 진행을 설명해 주셨는데, 저런식으로 조건을 넣어 줄 경우 정렬을 하지 않아도 상관이 없을 것 같았는데 답이 다르게 나오더군요.무슨 차이인가요?
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
6 - G 반례 (-1 출력)
제가 생각한 반례가 맞는지 여쭤보고 싶어 질문 드립니다! 틀린 코드: http://boj.kr/14b153f8d05946abab1e61585a86d685맞는 코드: http://boj.kr/ec182d95af3a4eee981ba3b00db1688a 두 코드의 차이는 -1 출력 조건인 거 같습니다!하단은 틀린 코드에서 -1 출력 부분 조건입니다. if (x == y) { return 0; } 위 처럼 되면 추가 게임 횟수를 최대 범위인 10억까지 채웠지만 z의 값이 변하지 못 할 수도 있기 때문에, 이런 경우 때문에 틀린 거 같습니다! 혹시 제가 생각한 반례가 맞을까요..! 그 외에는 x==y인 경우로 걸러낼 수 있다고 생각합니다! 아래는 정답 코드 부분입니다! int main() { cin >> x >> y; z = (((ll)y * 100 / x)); origin = z; ll lo = 1, hi = 1000000004; while (lo <= hi) { ll mid = (lo + hi) / 2; z = (((ll)((y + mid) * 100) / (x + mid))); if (z != origin) { ret = min(ret, mid); hi = mid - 1; } else { lo = mid + 1; } } if (ret == LLONG_MAX) { cout << -1 << '\n'; } else { cout << ret << '\n'; } }
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
플로이드 관련 강의 / 교재 수정 제안 드립니다
큰돌님 안녕하세요?플로이드 보던 중 이상한 코드가 보여서 게시글 올립니다.개념강의에서 11404 플로이드 문제를 예시르 들어주셨는데요 정답 코드가 좀 이상해서 제안 드리게 되었습니다.아래 스샷 인데요, 삼항연산자는 필요가 없습니다 (이미 fill 로 INF로 초기화 했으므로)dist[a][b] = min (dist[a][b],c);로 바꾸는게 어떨지 제안 드립니다.
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
7-G 질문있습니다 :)
안녕하세요 선생님 🙂 문제의 반례를 못찾겠어서 질문드립니다. 36번째 줄에 있는 dp[temp] = 1;이 들어가면 배열의 범위가 초과되는 경우가 있다고 하는데요, 어떤 반례가 있는지 잘 모르겠습니다. 1, 5, 12의 테스트케이스들을 전부 1로 초기화하면 안되는 이유가 있을까요? http://boj.kr/5855aa6cbb0b4df1acddd8288205e6cb
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
7-C 질문입니다. 문제에서 메모이제이션이라는 개념이 잘 와닿지가 않습니다..
메모이제이션이란 반복된 계산을 피해 시간을 단축시키는 기법이라고 이해하고 있습니다.근데 이 문제에서는 잘 와닿지가 않습니다..이 경우에 (3,1)에서 이미 dp가 1로 셋팅이 되어 있어서 바로 1을 반환하게 되는데..1로 셋팅된 값이 그 이상의 값으로 셋팅되는 경우의 수는 없을까요? 저렇게 가차없이 바로 return해도 되나 좀 복잡합니다.. 답변주시면 감사하겠습니다!