묻고 답해요
169만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨코딩테스트 [ ALL IN ONE ]
while 반복문의 조건에 대해 질문있습니다.!
안녕하세요 선생님강의 잘듣고 있습니다.! while 반복문의 조건이l == r 일때까지 반복문을 실행하는건 이해했는데 왜 조건이 l < r 인지 잘이해가 안됩니다ㅠ 혹시 while 반복문의 조건을 l != r 이라고 해도 되는건가요?
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
8-B 문제 질문
안녕하세요 큰돌선생님 매번 좋은 강의 감사합니다.. 문제를 풀다가 못풀어서 선생님 코드를 보고 강의를 시청하였는데요, rpg함수는 dp배열을 갱신하는 재귀함수인데 기저사례가 없는 이유가 궁금합니다. 아직 제가 코드를 완전히 이해하지 못하는것 같은데, 제 생각으로는 선생님코드 for(int p = 0; p <= pnt; p++){ int nextSTR = min(1000, STR + p); int nextINT = min(1000, INT + pnt - p); ret = max(ret, rpg(nextSTR, nextINT)); }이 부분에서 pnt가 0이더라도 계속 rpg() 함수를 호출할것 같은데 제가 어느부분을 이해하지 못하는 건가요??
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
6-j 범위체크 조건 질문드립니다
https://www.acmicpc.net/source/share/c705165d9da648cab807897686bcb320논리로직은 이해를 한거같은데 아직도 이분탐색에서 left와 right를 체크하는부분에서 mid값을 걸러내는부분이 잘 이해가가지않네요 right에서 mid값을 가지고오나 left를 체크할떄 가지고오나 결과는 같을거라고 생각했는데 아직도 이부분이 잘 이해가가지않습니다 ㅜㅜ
-
해결됨자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
계단오르기 질문
강의를 듣기에 앞서 계단오르기 문제를 DFS로 풀었습니다. 아래와 같이 문제를 풀어도 문제가 없을까요?// 계단 오르기 function solution(target){ const count = [1,2]; const answerArr = [] const set = [] let answer = 0; function dfs(n){ if(n>target) return if(n === target){ answer+=1 answerArr.push([...set]) return } for(let el of count){ set.push(el) dfs(n+el) set.pop() } } dfs(0) console.log(answerArr) return answer }; console.log(solution(7)) console.log(solution(8)) console.log(solution(4))
-
해결됨코딩테스트 [ ALL IN ONE ]
defaultdict() 함수의 선언부가 궁금해요
다익스트라 Network Delay Time 강의에가중치 그래프 구현을 위해 사용된 defalutdict() 함수의 내용이 없네요 어떻게 선언하셨는지 궁금합니다.
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
반례에 대해서 질문드립니다
제가 작성한 코드http://boj.kr/7e8f78a1feb2433fa70b2a847a23cfff 첫 번째 질문제가 작성한 코드는 반례처리를 하지 않았는데 통과됐습니다.이 문제는 시작점과 도착점이 같은 경우에도 반례처리가 필요하지 않은 문제 아닌가요? 두 번째 질문방문하지 않은 정점을 방문할 때, cnt[there] += cnt[here]인 이유가 무엇인가요?저는 cnt[there] = cnt[here] 라고 생각합니다.
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
6-J 질문 드립니다.
#include<iostream> #include<algorithm> #include<stack> using namespace std; typedef long long ll; ll n, m, ans, last_su; ll a[10004]; int check(ll mid){ ll cnt =0; for(int i=0; i<m; i++){ cnt += mid / a[i] + 1; } return cnt >= n; } ll last_check(){ ll cnt=0; for(int i=0; i<m; i++){ cnt += (ans-1) / a[i] + 1; } return n - cnt; } int main(){ ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); cin >> n >> m; for(int i=0; i<m; i++){ cin >> a[i]; } // 이 부분 ll l=0, r=6*1e10+4; while(l <= r){ ll mid = (l+r)/2; if(check(mid)){ r = mid-1; ans = mid; } else{ l = mid+1; } } if(ans){ last_su = last_check(); }else{ cout << n << '\n'; return 0; } vector<ll> v; for(int i=0; i<m; i++){ if(ans % a[i] == 0){ v.push_back(i+1); } } cout << v[last_su-1] << '\n'; } 다른 부분은 아니고 위의 코드를 제출 했을 때 정상적으로 맞았다고 나오는데, 시험삼아 while(l<=r) 위의 줄에서, 이분탐새하기 직전 l과 r을 선언하는 줄에서r = 1e18로 정의하였을 때 오답이 나옵니다.1e18도 long long의 범위 이내인데 어째서 오답이 나오는지 모르겠습니다.
-
미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
해당 코드가 테스트 케이스 2개는 통과했는데 나머지 부분에서 오류가 났습니다.
import java.util.*; import java.io.*; public class Main { static int[][] graph; static boolean[][] visited; static int N; static int[] answer; static int real; public static void solution(int y, int x) { // y : 학생, x : 학년 visited[y][y] = true; // 자신을 카운팅하지 않기 위한 방법 for (int i = 1; i <= N; i++) { //세로 비교 (반 같은지 비교) if (graph[i][x] == graph[y][x] && !visited[y][i]) { answer[y]++; visited[y][i] = true; } } int max = Integer.MIN_VALUE; // answer 배열에서 최댓값 찾기 for (int i = 0; i < answer.length; i++) { if (answer[i] > max) { max = answer[i]; real = i; } } } public static void main(String args[]) throws IOException{ // 0. 입출력 구현 BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); StringTokenizer st = new StringTokenizer(br.readLine()); N = Integer.parseInt(st.nextToken()); graph = new int[N+1][6]; visited = new boolean[N+1][6]; answer = new int[N+1]; for (int i = 1; i <= N ; i++) { String[] str = br.readLine().split(" "); for (int j = 1; j <= 5; j++) { graph[i][j] = Integer.parseInt(str[j - 1]); } } for (int i = 1; i <= N; i++) { for (int j = 1; j <= 5; j++) { solution(i ,j); } } bw.write(String.valueOf(real)); bw.close(); br.close(); } }피드백 요청합니다..!
-
미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
간단한것 같아 toUpperCase로 후딱 풀었습니다!
감사합니다. function solution(question) { return question.toUpperCase(); } console.log(solution("ItisTimeToStudy"));
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
시간초과
안녕하세요, 시간초과로 통과하지 못해서 질문드립니다.http://boj.kr/c89e043975f349bbb7a4066422235fc0이전에 단순히 dfs만 써서 풀었을 때와 로직은 동일합니다. 다만 이번엔 visited를 2차원 벡터가 아닌 int형 변수 하나로 처리했고 방문하는 경우엔 | 연산으로 비트를 켜줬고 방문을 마치고 나선 & ~(1<<idx) 와 같이 비트를 꺼줬습니다.선생님의 코드와 제 코드의 함수 호출을 비교해보니 예제의 경우에선 함수 호출 횟수도 동일했습니다. 그런데 시간초과가 생기는 이유는 무엇일까요?
-
미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
오답 확인 부탁드립니다.
import java.time.Year; import java.util.*; class Main { public static int solution(int N, int M, int[] arr) { int answer = 0; for (int lt = 0; lt < N; lt++) { int sum = 0; int rt = lt; while (sum < M) { sum += arr[rt]; rt++; if (rt >= N) break; if (sum == M) { answer++; } } } return answer; } public static void main(String[] args){ Scanner kb = new Scanner(System.in); int N = kb.nextInt(); int M = kb.nextInt(); int[] arr = new int[N]; for (int i = 0; i < N; i++) { arr[i] = kb.nextInt(); } System.out.println(solution(N, M, arr)); } } 오답이 나와 확인해봤습니다.답이 1씩 낮아서 확인해보았는데(테스트의 N=100, M=100 지점), answer가 1씩 낮았습니다.답지와 제코드의 결과값을 비교해보았는데 너무 다른 양상이 나와 질문합니다. 답지answer: 18 lt: 50 rt: 83 sum: 100answer: 19 lt: 53 rt: 86 sum: 100answer: 20 lt: 55 rt: 88 sum: 100answer: 21 lt: 58 rt: 91 sum: 100answer: 22 lt: 60 rt: 93 sum: 100answer: 23 lt: 65 rt: 99 sum: 100 제 코드answer: 16 lt: 46 rt: 77 sum: 100answer: 17 lt: 49 rt: 83 sum: 100answer: 18 lt: 50 rt: 84 sum: 100answer: 19 lt: 53 rt: 87 sum: 100answer: 20 lt: 55 rt: 89 sum: 100answer: 21 lt: 58 rt: 92 sum: 100answer: 22 lt: 60 rt: 94 sum: 100 어디가 잘못된걸까요?
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
7-J 왜 왼쪽부터 하면 틀리나요? ㅠㅠ
공유 소스 보기 (acmicpc.net)
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
6-G 조건체크에서 질문이있습니다
http://boj.kr/3aa1410045524133b6e2b5ea6da1bcce현재 해당코드를 통해서 정답은 맞췄는데 제가생각했던건 MID-1, MID+1로 조건탐색을하고 left <= right 조건을 통해서 left가 조건탐색이 끝났을때 기준으로 left가 정답이라고 생각하고 이때 left가 max조건을 넘겨버리면 체크하는걸로 해결했는데 설명코드에서 mid를 ret으로 체크되는부분이 잘 이해가가지않아 질문을남깁니다 항상감사합니다
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
7-E 끝에서 return 1하는건 알겠는데 dp배열을 초기화 안해도 되나요?
왜 안해도 결과가 잘 나오는지 궁금하네요이전 테스트 케이스 결과가 dp에 반영되어있지않나요?테스트 케이스끼리도 같은 구조가 반복되어서 dp를 초기화 안해도 되는건가요
-
미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
배열에 for of, 객체에 for in이라고 생각하다가 문자열에 for of 너무 좋군요
감사합니다.function solution(question) { let answer = 0; for (const x of question) { if (x === x.toUpperCase()) answer++; } return answer; } console.log(solution("KoreaTimeGood"));
-
미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
제가 풀던 방식과 이전에 배운 for of를 이용해서 두가지 방법으로 풀어보았습니다
감사합니다.function solution2(question, word) { let i = 0; for (const x of question) { if (x === word) i++; } return i; } function solution(question, word) { return question.split(word).length - 1; } console.log(solution("COMPUTERPROGRAMMING", "R")); console.log(solution2("COMPUTERPROGRAMMING", "R"));
-
미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
특정 단어를 기준으로 split으로 자르고 join으로 다시 붙여서 풀었습니다
감사합니다.function solution(question) { return question.split("A").join("#"); } console.log(solution("BANANA")); console.log(solution("AATTNK")); console.log(solution("AJUERHNHANLDJFMNKAMMJKDJKFAMMKA"));
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
전역변수를 사용하지 않은 백트랙킹 코드 질문
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.안녕하세요 큰돌님 강의잘 보고 있습니다. 저는 다음과 같이 코드를 작성을 했는데 전역변수를 사용하지 않은 코드에서 백트래킹조건을 어디에 적어주어야 하는지 알 수 없어서 질문드립니다. 그리고 제가 재귀함수에 익숙치 않은 상태인데 재귀함수를 학습하는 방법에 대해서도 알려주실 수 있으신가요? 제가 부족해서 교안이나 강의에 해주신 설명으로는 이해하는데 어려움을 겪고 있습니다. 답변 감사합니다.int go(int idx, int sum, int mx, int n, int * a) { if (idx == n) { cnt++; return mx; } int with_item = go(idx + 1, sum + a[idx], max(mx, sum % 11), n, a); int without_item = go(idx + 1, sum, mx, n, a); return max(with_item, without_item); } int main() { ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n = 10; int a[] = {24, 35, 38, 40, 49, 59, 60, 67, 83, 98}; cout << go(0, 0, 0, n, a) << "\n"; cout << cnt; return 0; }
-
해결됨[파이썬/Python] 문과생도 이해하는 DFS 알고리즘! - 입문편
선생님! 바이러스 문제 코드 질문있어요오
선생님 안녕하세요 유튜브에서 보고 오늘 처음 수강했는데 너무 귀에 잘 들어와서 재미있어요 bfs 강의도 올려주세용!다름이 아니고 바이러스 코드 중 이해가 안 되는 부분이 있어 질문 남깁니다!def dfs(idx): global visited, graph, answer visited[idx]= True answer += 1 for i in range(1, n+1): if not visited[i] and graph[idx][i]: dfs(i)바이러스 코드에서 idx가 3이 되고 answer가 3이 되는 부분 까지는 이해를 했는데 idx가 3일 때 for문을 돌면 2는 이미 방문했기 때문에 if문은 7까지 true가 되지 못하고 종료되는 것 아닌가요? 다시 idx=2로 돌아가서 5를 방문하게 되고 1에서 6을 방문하게 되는 부분은 코드 어느 부분에서 이루어지는 건지 잘 모르겠어요ㅜㅜ
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
2-p14502 vector&lt;pair&lt;int,int&gt;&gt;의 조합을 뽑아내는 방법은 없을까요?
큰돌님 안녕하십니까?모범답안에서는 3중 포문을 사용해주셨는데재귀로 pair<int,int>를 Wall List를 조합으로 뽑아내서 풀이하고 싶습니다. 아이디어는vector<pair<int,int>> v; v.push_back(1개 wall의 [y][x]);void combi(int start, vector<pair<int,int>> b){ ... }로 3개를 뽑아내는 방법인데 다른 코드를 참고해도 위 아이디어는 잘 없길래 질문 드립니다.모범 코드를 제시해 주실 수 있으실까요?미리 답변 감사합니다.수강자 올림