묻고 답해요
169만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
이렇게 풀어도 괜찮은걸까요?
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. function solution(arr) { let answer = arr; for (let i = 1; i < arr.length; i++) { for (let j = 0; j < i; j++) { if (arr[i] < arr[j]) { arr.unshift(arr[i]); arr.splice(i + 1, 1); } else { if (arr[i] < arr[j + 1]) { arr.splice(j + 1, 0, arr[i]) arr.splice(i + 1, 1) } } } } return answer; } let arr = [11, 7, 5, 6, 10, 9]; console.log(solution(arr));
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
1-N 1629 홀수 일 때의 처리가 이해가 되지 않습니다.
#include <bits/stdc++.h> using namespace std; long long A, B, C; long long go(long long a, long long b) { if (b == 1) { return a % C; } long long ret = go(a, b / 2); ret = (ret * ret) % C; if (b % 2 == 1) { ret = (ret * a) % C; } return ret; } int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cin >> A >> B >> C; cout << go(A, B) << '\n'; }B가 홀 수 일 때, 홀수 처리를 하기 직전ret = A^(B-1) % C 입니다.그러면 홀수처리가 진행 될 때ret = ((A^(B-1) % C) * A) %C 가 코드의 상황 인데 이게 최종 결과인 A^B % C 와 같아지는게 이해가 안됩니다. 나머지 연산의 합동공식이(a * b) % c = (a % c * b % c) % c 이기 때문에 A^B % C= (A^(B-1) * A) % C= (A^(B-1) % C * A % C) % C위와 같은 식이 나와야 하고 ret = (ret * a) % C가 아니라ret = (ret * a % C) %C 가 되어야 하는 것 아닌가요? 백준에서는 둘다 맞게 처리 되는데 이해가 되지 않습니다.
-
미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
강의보기전 직접 풀 수 있는 문제 오랜만입니다. ㅠㅠ
이전 2문제에 비해 다소 쉬웠습니다.function solution(cards, orderNum) { let answer = []; let n = cards.length; // n개 카드수에서 3개를 더한 합의 값이 제일 큰 순서대로 나열 // k번째로 큰 수를 리턴 for (let i = 0; i < n; i++) { for (let j = 0; j < n; j++) { if (i === j) continue; for (let z = 0; z < n; z++) { if (i === z) continue; if (j === z) continue; answer.push(cards[i] + cards[j] + cards[z]); } } } answer = answer.sort((a, b) => b - a); return Array.from(new Set([...answer]))[orderNum - 1]; } const k = 3; console.log(solution([13, 15, 34, 23, 45, 65, 33, 11, 26, 42], k));
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
4-C 질문입니다
http://boj.kr/f816b7f59d3247c7958683ceae5d6b76선생님 안녕하세요.모든 경우의 수 마다 구역을 색칠해서 dfs가 2번호출되면 최솟값을 갱신하는 로직으로 짰습니다.테스트케이스는 다맞는데 왜 틀리는지 이유를 모르겠습니다.
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
강의교재p107
if(mp.find(1) == mp.end())이런 반복문 조건이 나오는데요 mp[1]을 할당하지 않기 위해서 이렇게 조건을 쓰신것 같은데요 조건식같은경우는 일단 할당된것이 하나밖에 없으니깐 처음과 끝이같다 그래서 참이다가 맞나요?그런데 그렇게되면 할당을 한것이랑 똑같지 않나요?
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
강의교재 p106 질문
cout << mp[1] << '\n'; cout << mp2["aaa"] << '\n';이 코드에서요 위의 코드는 key에 1 값에 0을 저장하는 것은 알겠습니다.그리고 두번째 코드에서도 key에 aaa까지는 알겠는데 코드 실행결과를 보면 값이 %가 나와있습니다. 왜 그렇게 값이 나오는건가요?
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
강의교재p104
mp.erase("kundol"); auto it = mp.find("kundol"); if(it == mp.end()){ cout << "못찾겠네 꾀꼬리\n"; } 이 코드결과 "못찾겠네 꾀꼬리"가 실행이 되는데요 제 생각에는 kundol을 erase 했으니 mp에 find를 실행하면 kundol이 없으니깐 0을 반환해서 it이 0이되고 그리고 mp.end는 지금 key값이 3개가 있으니 인덱스값이 2가되서 if반복문이 실행이 안되야하는거 아닌가요?
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
강의교재 p100 erase() 질문
auto it = a.begin(); it++; a.insert(it, 1000); print(a); it = a.begin(); it++; a.erase(it); print(a); 강의교재를 보시면 이러한 코드가 나오는데요 저 코드를 실행한 결과는 3 1000 2 1 1 2 3 3 2 1 1 2 3이렇게 나오는데 결론적으로 1000이 사라졌습니다.하지만 제가 생각하기에 첫번째 auto it 에서 it++때문에 it= a.begin() +1이 되고 4번째 코드에서는 원래에 있던 it에 다시 it++를 하니 it = a.begin() + 2가 되는것이 아닌가요? 그래서 3 1000 2 1 1 2 3 여기에서 처음에 나오는 2를 삭제해야하는것이 아닌가요?
-
미해결Do it! 알고리즘 코딩테스트 with C++
문제 8번 질문드립니
#include <iostream>#include <vector>#include <algorithm>using namespace std;int main() { ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); int N; cin >> N; vector<int> save(N + 1 , 0); for (int i = 1; i <= N; i++) { cin >> save[i]; } sort(save.begin(), save.end()); int result = 0; for (int k = 1; k <= N; k++) { int s = 1; int e = N; while (s < e && s >= 1 && e <= N) { int temp = save[s] + save[e]; if (temp < save[k]) { s++; } else if (temp > save[k]) { e--; } else { //만약 s와 e가 k와 같아지면 안됨 if (s != k && e != k) { result++; break; } else if (s == k) s++; else if (e == k) e--; } } } cout << result << "\n";} 제가 다음과 같이 돌렸을 때 틀렸습니다라고 나오는데, 벡터에 저장할 때 0부터 저장하면 정답이라고 나오는 이유를 모르겠습니다
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
강의교재p94 2차원배열
vector v3[10];2차열 배열을 만드는 방법중에서 위와같은 코드로 2차열배열을 만들수 있다고 하셨습니다. 밑의 그림도 참고를 해봤는데 이해가 가지않습니다.V3[10]을 하게 되면 1차원에 10개의 공간만 생기는것이 아닌가요??
-
미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
안녕하세요 코드 리뷰 부탁드립니다 includes 사용하였습니다
<html> <head> <meta charset="UTF-8" /> <title>출력결과</title> </head> <body> <script> function solution(n, k, card) { let answer; let newArr = []; for (let i = 0; i < n; i++) { for (let j = i + 1; j < n; j++) { for (let k = j + 1; k < n; k++) { if (newArr.includes(card[i] + card[j] + card[k])) { continue; } else { newArr.push(card[i] + card[j] + card[k]); } } } } newArr.sort((a, b) => b - a); answer = newArr[k - 1]; return answer; } let arr = [1, 2, 3, 4]; console.log(solution(10, 3, arr)); </script> </body> </html>
-
해결됨독하게 C를 배운 사람을 위한 선형 자료구조
pTmp 변수를 사용하는 이유
노드를 추가하는 함수나 해제하는 함수에서 헤드노드를 pTmp변수에 대입한 후에 pTmp값을 가지고 코드를 짜는 게 이유가 있나요? 그냥 pTmp를 사용하지 않고 바로 헤드노드를 사용해도 괜찮지 않나요?
-
해결됨[파이썬/Python] 문과생도 이해하는 DFS 알고리즘! - 입문편
알고리즘 수업 - 깊이 우선 탐색 2( 백준 24480) 번 질문
강의 제목 : 알고리즘 수업 - 깊이 우선 탐색 2( 백준 24480) 번 질문 안녕하세요! 위 강의 10:14번에 나와있는 정리 노트 관련해서 하나 여쭤보고 싶은 것이 있어요! 5번 '방문 순서를 담기 위해서는 어떤 자료구조를 사용해야 될까?' 이거 답이 리스트(LIST) 인가요?? 혹시 이 정리 노트에 있는 질문 5개에 대한 답변이 적혀있는 PDF 같은 게 있을까요??나중에 자격증 공부할 때 도움될 것 같아서 여쭤봅니다 감사합니다! 강의 영상마다 질문이 있으면 언제든 그리고 바로 질문 남겨주세요! 질문할 때 가장 정확하게 이해할 수 있습니다.해당 영상과 관련된 질문들을 해주실 때 제가 가장 정확히 답변 드릴 수 있습니다!취업 전반의 상담이나, "제 코드가 왜 틀렸는지 알려주세요"와 같이 광범위한 질문은, 질문자의 상황에 따라 답변이 달라질 수 있기 때문에, 정확한 답변을 드리기가 어렵습니다 :(이런 분들을 위해서는 멘토링 항목으로 별도 제공하고 있으니, 다음 링크를 참고해주세요!이 링크를 통해서는 본인의 코드가 왜 틀렸는지 모를 때 질문을 주셔도 좋고, 취업 전반(면접 준비, 자소서, CS 면접 등)에 관련한 질문을 주시면 답변 드리겠습니다 :)"이 질문은 해도 되나?"라는 생각이 드신다면 우선 남겨주세요! 제가 답변 드리기 어려운 건 멘토링에 올려 달라고 재요청 드리겠습니다 :)
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
코드 순서 차이
1012번 문제 이전에 dfs. bfs 강의 부분에서 제가 기억하기로는 ret++; dfs(i, j); 이렇게 써서 제출 후 정답은 맞았습니다만...이 두 코드의 위치가 바뀌어도 상관없는 걸로 아는데제가 알고 있는 것이 맞나요?아니면 혹시 코테 볼 때는 dfs(i, j); ret++; 이렇게 해야만 하나요???
-
미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
실제 비슷한 문제를 sort()함수 사용하여 푼다면
코딩테스트 실전에서 sort()를 이용하여 풀고 제출해버리면영상에서 설명해주신 방법으로 해결한 답에 비해 떨어질 확률이 높아질까요?두 가지 방법으로 문제 풀어 보았고 둘 다 한번에 성공하긴 했습니다 다만, 실전문제에서 sort()함수를 사용하지 말라는 조건이 없다면 굳이 영상에서의 방법을 써야하는지도 궁금합니다.실전코테 시 문제가 여러개 나올 수도 있고 심적 압박(?)으로 반복문을 써야한다고 알고 있어도 긴장해서 sort()쓸 것 같아서요 ㅜㅜ
-
미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
다른 풀이 리뷰
안녕하세요 제가 강의 듣기 전에 혼자 풀어봤는데요function solution(s) { let answer = 0, stack = [], tmp = 0; // tmp : 잠시 * 개수 저장하는 곳 s = s.replaceAll("()", "*"); for (let x of s) { if (x === ")") { while (stack.length) { let top = stack.pop(); if (top === "*") tmp++; else { // 여는 괄호 나오면 answer += tmp + 1; for (let i = 0; i < tmp; i++) stack.push("*"); // 괄호들은 빼고 *만 넣기 tmp = 0; //tmp초기화 break; } } } else stack.push(x); } return answer; }일단 초반에 레이저 부분은 *으로 바꾸었고 바꾼 s 로 for 문 돌려서 풀었습니다..!(**)와 같이 되면 answer에 별개수+1 을 더하고괄호를 제외한 ** 별들만 다시 stack 에 넣어서 계산했습니다..!혹시 위 코드가 틀리거나 문제점이 있을까요 ???
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
강의교재 p90 erase() 이터레이터
1.v.erase(v.begin(), v.begin() + 3); 강의교재를 보시면 위의 코드가 나오는데요 저 코드를 실행한 결과 1~9까지의 숫자중에서 1~3까지의 숫자가 사라졌는데요 제가 해석한 바로는 앞의 begin을 으로 부터 +3이니깐 주소가 3칸 옮겨간거고 그리고 범위가 ()이므로 원래는 1~4이지만 4를 제외하고 1~3만 제거가 되는건가요? 2.auto a = find(v.begin(), v.end(), 100);같은 페이지에 있는 코드입니다.100을 찾아서 인덱스값을 a에 넣어야할것같은데요 9보다 그니깐 인덱스 값은 6이 되어야 하는것이아닌가요>?
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
4-B 재귀함수 관련 질문입니다.
go(here + 1); a[here] = ~a[here]; go(here + 1);go함수 내에서 강사님이 하신대로 위와 같이 호출하면 기저사례에 8가지 경우의 수(3행기준)가 모두 나온다는 것을 재귀함수 트리를 그려서 확인을 했을뿐 이해가 가지 않습니다..go(here + 1); a[here] = ~a[here]; go(here + 1); a[here] = ~a[here]; //원복뒤집고 go함수 호출하고 그 함수가 종료되고 다시 돌아왔을 때 바뀐 배열을 다시 뒤집는 과정이 있어야 함수가 똑바로 작동할거라고 계속 생각하게 되네요. 예를 들어, {4,5,1}이 있을 때 , go(1)이 호출되고 첫번째go(2)함수가 진행되다가 함수가 종료되어서 다시 go(1)로 돌아왔을 때, {4,5,1}이 되어있어야 기저사례에서 8가지 경우가 제대로 나올텐데 왜 원복 코드없이도 8가지가 제대로 나오는지 이해가 안됩니다!!!!!!!!!
-
해결됨코딩테스트 [ ALL IN ONE ]
강의 교재 공유 부탁드립니다~
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요. 강사님 강의 너무 잘 보고 있습니다.교재 공유 요청 했는데 확인 한번 부탁드리겠습니다~!
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
강의교재p84
cout << lower_bound(a.begin(), a.end(), 3) - a.begin() << "\n";페이지 중간을 보시면 이러한 코드가 나와있는데요 밑에 페이지에 있는 설명을 읽어보니 주소값의 차이가 2이기 때문에 2가나온다고 설명이 되어있습니다.그리고 p85를 보면 cout << &*lower_bound(a.begin(), a.end(), 3)<< "\n";이러한 코드가 나와있는데요 이 코드는 주소값을 반환하는것으로 나와있는데 맨 첫번째코드도 주소값을 반환하는것으로 알고있습니다. 두 코드의 차이는 &*가 붙어있다는뜻인데 &*기호가 붙어있어도 똑같이 주소를 나타낸다는 코드인가요?하지만 맨 처음 코드에서 -a.begin()을 해주고 나서 코드를 실행해보니깐 오류가 뜹니다..어떻게 해야할까요?