묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
5-B 코드질문있습니다.
안녕하세요 큰돌님.큰돌님께서 다른 수강생의 질문에 답하신 내용에 대해 질문드리고 싶습니다. while(true){ if(!s.size()){cout << "FRULA" << '\n'; return 0;} int flag = s.find(a); if(flag != string::npos){ s.erase(flag, a.size()); } else break; }큰돌님께선 문자열 S의 길이가 100만이고, 문자열 A의 길이가 1일 때, 해당 코드의 시간복잡도는 100만!이라고 하셨습니다.erase와 find의 시간복잡도는 O(N)으로 알고 있습니다.첫번째 턴 최대 O(100만) FIND + O(100만) ERASE,두번째 턴 최대 O(99만) FIND + O(99만) ERASE,...이런식이면 O(N^2)이지 않나요?어떻게 100만!이 시간복잡도가 되는지 궁금합니다.그리고 FIND의 시간복잡도가 O(N)인게 잘 이해가 안됩니다.그런데, 실제로는 O(N*M)이지 않나요? N은 찾아야 하는 문자열이 속한 문자열의 길이, M은 찾아야 하는 문자열의 길이.어떻게 O(N)이 되는지 궁금합니다.
-
미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
43번 뮤직비디오 문제 테스트케이스 4번을 만족 못합니다.
안녕하세요 문제를 풀다가 제 코드에서 어느 부분이 틀린 건지 도무지 모르겠어서 글을 쓰게 되었습니다..혹시 괜찮으시다면 제 코드 상에서 논리적인 오류가 있는지 확인해주실 수 있으신가요?테스트케이스 4번만 만족을 못시키고 있습니다.. 감사합니다.#include <iostream> #include <stdio.h> #include <string> #include <fstream> #include <vector> #include <algorithm> #include <queue> #include <stack> using namespace std; int main() { ios_base::sync_with_stdio(false); int n, m; cin >> n >> m; vector<int> table(n); int sum = 0; for (int i = 0; i < n; i++) { cin >> table[i]; sum += table[i]; } int lt = 1, rt = sum, mid = 0; int last = 1001; while (lt <= rt) { mid = (lt + rt) / 2; int cnt = 1; int sum = 0; for (int i = 0; i < n; i++) { if (sum + table[i] > mid) { cnt++; sum = table[i]; } else if (sum + table[i] == mid) { cnt++; sum = 0; } else sum += table[i]; } if (sum == 0) cnt--; if (cnt == m) { if (last > m) { last = m; rt = mid - 1; } else break; } else if (cnt < m) rt = mid - 1; else lt = mid + 1; } cout << mid << "\n"; return 0; }
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
2-T 질문있습니다
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.안녕하세요!http://boj.kr/6d0c1282d12442349667aa6073a52826해당 문제 질문 있습니다. 인덱스 1번부터 n번까지 번호를 저장하고 인덱스 1번과 다음인덱스들을 비교하면서 큰 수를 찾으면 출력하고 break를 이용해 다음인덱스 2번으로 이동하며 인덱스를 이동했습니다. 또한 cnt를 이용해 큰 수가 없는 경우 -1을 출력하게 만들었습니다. 예시로 입력된 입력들은 잘 출력이 되는데 어느 부분이 문제인지 잘 모르겠습니다!
-
미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
41. 연속된 자연수의 합 문제 질문있습니다.
안녕하세요 오늘도 강의 잘 시청하고 있습니다. 좋은 강의 항상 감사드립니다.다름이 아니라 이 문제를 수학적으로 접근하는 방법을 도무지 모르겠어서 일단 처음 풀 때는 수학에 연연하지 않고 스택을 이용해서 문제를 해결했는데 이렇게 풀어도 괜찮은 방식인지 궁금해져서 질문 드리려고 합니다. 채점 돌려봤을 땐 다 정답으로 뜨는데 혹시 제 코드에 논리적인 오류가 있을까요? #include <iostream> #include <stdio.h> #include <string> #include <fstream> #include <vector> #include <algorithm> #include <queue> #include <stack> using namespace std; int main() { ios_base::sync_with_stdio(false); int n; cin >> n; stack<int> table; for (int i = 1; i <= n / 2; i++) { int start = i; int sum = start; for (int j = i + 1; j <= (n / 2) + 1; j++) { sum += j; if (sum == n) { table.push(i); break; } else if (sum > n) break; } } int cnt = table.size(); while (!table.empty()) { int start = table.top(); int sum = start; cout << start; while (sum != n) { start++; sum += start; cout << " + " << start; } cout << " = " << n << "\n"; table.pop(); } cout << cnt << "\n"; return 0; }그리고 제가 문제를 풀면서 느낀 건데 제가 수학적인 사고력이 한참이나 부족하다는 것입니다. 강의를 끝까지 시청하면서 강사님 풀이 방식을 익히다 보면 저도 수학적인 사고력이 늘 수 있을까요? 지금까지는 수학 관련된 문제만 나오면 어떻게 해야 할지 도무지 갈피를 못 잡은 적이 많아서요.아, 그런 의미에서 이번 강의는 커뮤니티에 달아주신 내용이 정말 큰 도움이 되었습니다. 정말 감사합니다. 앞으로도 열심히 공부하겠습니다.
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
2-I. 틀린 이유가 궁금합니다.
http://boj.kr/ffdb3a2b0c96414ba111477f93c061b2외부tc는 정상출력되지만 제출을 하면 틀립니다.반례를 생각해봐도 도저히 떠오르지 않아 선생님께 여쭤봅니다.틀린 이유가 뭘까요?
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
2-P 왜 예제에서 0이 나올까요..?
코드가 아래와 같은데 뭐가 잘못된 걸까요..?ㅜ#include <iostream>#include <string>#include <vector>#include <queue>int calcArea(const std::vector<std::vector<int>> &map){ int result = 0; for(int i = 0; i < map.size(); ++i) { for (int j = 0; j < map[i].size(); ++j) { if (map[i][j] == 0) result += 1; } } return result;}void bfs(std::vector<std::vector<int>> &map, std::vector<std::vector<bool>> &visited, const int yy, const int xx){ std::queue<std::pair<int, int>> que; visited[yy][xx] = true; que.push({yy, xx}); int y, x; int moveX[4] = {0, 0, -1, 1}; int moveY[4] = {1, -1, 0, 0}; while(!que.empty()) { y = que.front().first; x = que.front().second; que.pop(); for(int i = 0; i < 4; ++i) { int newX = x + moveX[i]; int newY = y + moveY[i]; if (newX >= 0 && newX < map[0].size() && newY >= 0 && newY < map.size() && !visited[newY][newX] && map[newY][newX] != 1) { que.push({newY, newX}); visited[newY][newX] = true; map[newY][newX] = 2; } } } }int solve(std::vector<std::vector<int>> map, const std::vector<std::pair<int, int>>& virusList){ std::vector<std::vector<bool>> visited(map.size()); std::vector<bool> temp(map[0].size()); temp.assign(temp.size(), false); visited.assign(visited.size(), temp); for(int i = 0; i < virusList.size(); ++i) { bfs(map, visited, virusList[i].first, virusList[i].second); } return calcArea(map); }int solution(std::vector<std::vector<int>> map, const std::vector<std::pair<int, int>>& wallList, const std::vector<std::pair<int, int>>& virusList){ int result = 0; for(int i = 0; i < wallList.size(); ++i) { for (int j = 0; j < i; ++j) { for (int k = 0; k < j; ++k) { map[wallList[i].first][wallList[i].second] = 1; map[wallList[j].first][wallList[j].second] = 1; map[wallList[k].first][wallList[k].second] = 1; result = std::max(result, solve(map, virusList)); map[wallList[i].first][wallList[i].second] = 0; map[wallList[j].first][wallList[j].second] = 0; map[wallList[k].first][wallList[k].second] = 0; } } } return result;}int main(){ std::ios_base::sync_with_stdio(false); std::cin.tie(nullptr); std::cout.tie(nullptr); int N, M; std::cin >> N >> M; std::string str; std::vector<std::vector<int>> map; int temp; std::vector<std::pair<int, int>> wallList, virusList; for (int i = 0; i < N; ++i) { std::vector<int> tempVec; for(int j = 0; j < M; ++j) { std::cin >> temp; if (temp == 1) wallList.push_back({i, j}); else if (temp == 2) virusList.push_back({i, j}); tempVec.push_back(temp); } map.push_back(tempVec); } int result = 0; result = solution(map, wallList, virusList); std::cout << result << std::endl; return 0;}
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
5-M 질문있습니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.http://boj.kr/2b485a2e7fac41d9879fd3e685d8b70b선생님 저는 이 문제를 보고 짝짓기와 유사하게 풀 수 있겠다는 생각해서 다음과 같이 문제를 풀었습니다.근데 오답으로 처리가 되어서 어느 부분에서 잘못 생각한건지 판단이 잘 되지 않아서 이렇게 질문 올립니다. 감사합니다.
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
2-i 질문입니다
http://boj.kr/2e757e26d0db4585afd7179a25022264질문있습니다.문자열을 입력받는다각 문자열을 돌면서 숫자가 있다면 tmp에 넣는다.숫자가 아닌 문자가 들어온다면 tmp를 숫자로 바꿔서 벡터에 넣어주고 tmp를 비운다.로 만들었는데 틀렸다고 하네요예제 같은경우는 정답으로 나오는데 왜 틀렸는지 모르겠습니다.
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
2-I 질문
안녕하세요! 2-I 맞왜틀이 나와서 질문드립니다...일단 문제의 예제 입력은 다 맞게 나오던데요,제가 짠 코드의 로직은:입력받은 문자열을 문자 하나하나 앞에서부터 검사해서, 0~9까지의 숫자이면 string s에다가 저장해놓습니다. 즉 숫자를 저장합니다.만약 0~9까지의 숫자가 아니면 문자가 등장했다는 뜻이므로 여태까지 s에 저장되었던 숫자열이 저장될 vector<string> nums에 push_back() 합니다.그런 다음 공간채우기용 0을 제거하는 로직을 거치는데요.nums의 문자열들을 string num을 통해 가져와서 앞에서부터 하나하나 검사하는데 0을 만나게 되면 공간채우기용 0을 의미하므로(is_zero_prefix == true) 0이 아닐 때까지 다음 문자를 하나하나 검사하다가 0이 아닌 문자를 만나면 공간채우기용0 검사모드를 끝냅니다.(is_zero_prefix==false)이런 로직들을 거쳐서 원하는 출력을 내보내는데요..분명 맞게 나오는데 어떤 반례가 있길래 맞왜틀이 나와버리네요 ㅠㅠ어떤 부분이 잘못된걸까요..?http://boj.kr/a20edfc48ee4476d938520e7fe90a188
-
미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
filter를 이용해 풀어보았습니다.
<html> <head> <meta charset="UTF-8" /> <title>출력결과</title> </head> <body> <script> function solution(arr) { let answer = []; answer = arr.filter( (number, index) => index === 0 || number > arr[index - 1] // 첫 번째 수는 무조건 출력 ); return answer; } console.log(solution([7, 3, 9, 5, 6, 12])); console.log(solution([2, 3, 4, 5, 2, 0])); </script> </body> </html>
-
해결됨세계 대회 진출자가 알려주는 코딩테스트 A to Z (with Python)
BOJ 1759 문제 오답이 생기는데, 어느 부분이 틀리는 것인지 설명 부탁드립니다.
안녕하세요, 좋은 강의 만들어주셔서 감사합니다.'조합 알고리즘' 부분 진도 나가고 있는데, 다음과 같이 시도했더니 오답이 떴습니다.아예 처음부터 L개의 원소를 뽑아 조합을 만든 다음,모음과 자음의 갯수가 미달되면 해당 조합은 지우는 방식으로 시도해봤는데,(for문이 세개나 나와서 좀 조잡한 풀이 같아 보이긴 하지만..ㅠㅠ)이 풀이가 틀리게 되는 이유를 혼자 힘으론 찾기가 어려워서 도움을 구해봅니다...!from itertools import combinations L, C = input().split() chars = list(input().split()) mo = ['a', 'e', 'i', 'o', 'u'] candidates = list(combinations(chars, int(L))) for can in candidates: mo_num, ja_num = 0, 0 for i in can: if i in mo: mo_num += 1 else: ja_num += 1 if mo_num < 1 or ja_num < 2: candidates.remove(can) sol = [] for ans in candidates: ans_str = '' for i in sorted(ans): ans_str += i sol.append(ans_str) for i in sorted(sol): print(i)
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
visited 범위 질문 드립니다
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.안녕하세요 큰돌님! 항상 강의 잘 듣고있습니다 ~1:00에서 visited 의 범위를 20만 까지라고 말씀해주셨는데요 !최단시간에 동생에게 도달하려면 10만이 넘지 않아야 되는것 아닌가요?수빈이의 위치 n이 10만을 넘기는 예시를 이것저것 찾아보았지만 찾을수 없었습니다.동생의 위치가 99999 이고수빈의 위치가 50001 이여도100002 > 100001 > 100000 > 99999 보다는50000 > 100000 > 99999 가 더 빠르기 때문입니다.
-
미해결김영한의 실전 자바 - 중급 2편
HashIndex() 와 capacity에 대해
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]강의를 듣던 중 의문이 생겨 질문 드립니다.메모리 최적화를 위해 value % capacity 를 통해 HashIndex 를 얻고, 이를 통해 메모리 최적화와 검색, 조회 속도 등에서 이점을 얻을 수 있다는 것은 이해가 됐습니다.그런데, List 의 배열 특성상, capacity가 동적으로 변하게 될텐데, 이에 따라 동일한 value 를 넣어도 다른 hashIndex가 만들어지지 않을까요?학습용이라 가장 심플한 방법으로 보여주신 것 뿐일까요?
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
npos 관련 질문입니다!!
안녕하세요 선생님. 수업 잘 보고 있습니다.공부를 하다가 궁금한 점이 생겨서 질문드립니다.강의록을 보니string::npos는 size_t 타입의 최대값을 의미합니다. size_t 타입의 최대값은 OS에 따라 달라지며 64비트 운영체제라면 64비트 부호가 없는 최대정수, 32비트 운영체제라면 32비트 부호가 없는 최대 정수값을 가집니다. 필자의 컴퓨터는 64비트 운영체제이기 때문에 18446744073709551615라는 값을 가집니다.라고 나와 있는데 예를 들어 split 함수에서 찾고 싶은 문자열이 최대 정수값의 위치에 존재하게 된다면 그때는 코드가 제가 원하는대로 작동하지 않는 문제가 생기는게 아닌가 궁금합니다. 이러한 문제가 발생하는지와 발생한다면 그 해결법이 궁금합니다! 인터넷에 있는 npos와 관련된 문서들을 쭉 읽어보았는데 제 궁금증을 해결해주는 문서가 없어서 질문드립니다. 감사합니다!
-
미해결김영한의 실전 자바 - 중급 2편
if 문 작성 시 else 도 함께 작성해주는 것이 좋나요?
문제 1번의 경우 if 구문을 사용할 때 저는 else 를 안 넣고 바로 return 으로 표현했거든요.static <T extends BioUnit> T maxHp(T unit1, T unit2) { if (unit1.getHp() > unit2.getHp()) { return unit1; } return unit2; }답안엔 else 를 같이 쓰는 것으로 나와서 혹시 else를 쓰고 안 쓰고를 결정하는 메뉴얼이나 혹은 더 좋은 코드의 기준이 있을까요?=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
4-j에서 k = i *m + j
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.안녕하세요 큰돌님 강의 잘 듣고있습니다.다름이 아니라 코드 중에 int k = i * m + j이 부분이 어떤 것을 하는 코드인지 잘 모르겠습니다.0 1 2 -> 0 * M + 0 , 0 * M + 1, 0 * M + 2라고 해주셨는데 이게 어떤 거를 확인하는 코드인지 잘 모르겠습니다ㅠㅠ 3 4 56 7 8
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
7-V 질문
안녕하세요.강의 코드에서 ret = -1e6; 로 되어 있는 걸 -1 로 대신 대입하면 문제가 틀리게 되는 이유가 뭔가요?here == n 까지 도달하면 0이 리턴되고, 시간과 금액은 자연수로 주어지므로, 한 번 끝까지 구해진 경우는 모두 dp값이 0보다 큰 값이 저장될 것 같은데 왜 틀리는지 궁금합니다.
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
5-P 질문드립니다.
안녕하세요 선생님.해당 문제를 다음과 같은 로직으로 풀어보았으나, 테스트케이스도 통과를 못하여 질문드립니다.a라는 배열에 순서별로 톱니바퀴들을 입력go() 함수를 통해, 시작점으로부터 좌우로 진행하며 회전방향 결정check 배열에 넣어둔 회전방향에 따라 진행 (0: 멈춤, -1:반시계, 1:시계)제출 링크입니다.http://boj.kr/b378ed26be3a436cbc7dbe705184aedd항상 좋은 강의 감사드립니다.
-
해결됨2주만에 통과하는 알고리즘 코딩테스트 (2024년)
1090 아이디어 3번 질문
1090번 문제 3번째 아이디어가 잘 이해가 안돼서 질문 드립니다.제가 이해한 바로는, 최소거리를 구하는 것을 요구하고 있으니깐,특정 인물이 특정 집으로 가기 위한 거리를 각각 저장해둔 뒤에2명이 모였을 때 최소거리를 구할 때에는 각각 저장해둔 값 중 둘이 더했을 때의 최소값을,3명이 모였을 때의 최소거리를 구할 때에는 동일하게 저장해둔 값 중 셋 더했을 때의 최소값을구하는 방식으로 최소 거리를 구하는 것이 맞나요? 영상에서 설명해주실 때에는 [1,2,3] , [3,4,5], [2,2,5]의 예시를 들어주셨는데2명이서 모였을 때 최소거리는 둘이 합했을 때 가장 적은 1+2 즉 3이 되는거라고 설명해주셨습니다. 하지만 저장한 값이 특정 집에서 다른 사람의 거리를 저장한 것이므로 한 사람은 본인의 집에, 다른 사람은 최소 거리만큼 이동하여 0+1 즉, 2명이 모였을 때 최소거리는 1이 되는 것 아닌가용..? 제가 잘 이해를 못해서 질문 드립니다 .
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
문제 이해의 어려움
두 재료 고유번호를 합하여 갑옷을 만든다하여 본인은 한번 사용한 재료는 사용하지 못한다고 이해했습니다.예를 들자면입력:552 3 3 4 1일 경우 (2, 3) (4, 1) 만 가능하다고 생각했는데큰돌님 코드는 (2, 3) (2, 3) (4, 1) 이렇게 3가지 경우가 가능하다고 알고 있습니다. (결과가 3이 뜨길래)문제에서 재료가 소멸된다. 이런 말이 없었기 때문에 사용했던 재료가 다시 사용돼도 괜찮은건가요?문제 이해가 잘 안되어 질문드려요.http://boj.kr/04ebbdad45904d0dae1f5e5892757404