묻고 답해요
161만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결김영한의 실전 자바 - 중급 2편
제네릭 하한 바운드(super)의 활용 사례
안녕하세요. 제네릭 하한 바운드(super) 관련해서 질문 드립니다.상한 바운드(extends) 같은 경우에는 현재 실무에서도 유용하게 사용하고 있는데요.다만 하한 바운드는 실무에서 한번도 사용해본 적이 없습니다.하한 바운드는 결국 Object까지 거슬러 올라갈 수 있기 때문에 이점이 없다고 생각하고, 보통은 상한 바운드로 해결이 되었기 때문인데요.혹시 하한 바운드에 대한 활용 사례를 간단히 설명해주실 수 있으실까 해서 질문 드립니다!
-
해결됨김영한의 실전 자바 - 중급 2편
주소값에 실제로 접근하는데 걸리는 시간??
강의 주제와 직접적인 연관은 없는거지만.. 실제 주소값으로 접근하는데 걸리는 시간은 고려하지 않아도 되는가? 입니다 아무리 배열이 인덱스의 실제 주소값을 한번에 계산해서 찾는 구조라고는 해도 결국 그 주소까지 이동하는건 시간이 걸릴거같은데요예를들어 그게 10억 번째 인덱스라면 거기까지 순간이동 할수는 없잖아요?? 그래서 인덱스 번호에 비례해서 시간이 더 걸리긴 할거같은데..이건 너무 인간의 관점에서 생각하는거고 실제로 컴퓨터는 다르게 동작하는 걸까요?? 제가 생각해도 너무 무식한 질문이긴한데 의문을 해소하고자 질문 드립니다 ㅠㅠ ============================ 수강을 더 진행하다보니 실제 성능 설명 파트에서 메모리 접근에 대한 얘기를 해주셔서 의문이 자연스럽게 해결됐습니다 !
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
5-A 질문있습니다
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.#include<iostream> #include<deque> #include<utility> #include<algorithm> using namespace std; int n,p,d,ret=0,p1,d1,num; deque<pair<int,int>> dp; bool comp(const pair<int,int> &a, const pair<int,int>&b){ return a.second<b.second; } int main(){ ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); cin>>n; for(int i=0; i<n;i++){ cin>>p>>d; dp.push_back({p,d}); } sort(dp.begin(),dp.end(),comp); num = dp.back().first; d1 = dp.back().second; dp.pop_back(); for(auto a = dp.rbegin(); a != dp.rend(); a++){ if(d1 == a->second){ num = max(num,a->first); } else{ ret += num; num = a->first; d1 = a->second; } } ret += num; cout<<ret; return 0; } 저는 이런 방식으로 풀어보았는데 어떤 문제점이 있을까요?
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
Stack, deque, queue 관련 질문
안녕하세요!공부중에 궁금한 점이 있어서 문의드립니다. deque 같은 경우에는 stack과 queue 모두의 장점을 가지고 있고, 따로 시간적으로 더 복잡하거나 하지도 않는 것으로 이해하고 있는데, 그럼 deque만 사용하는게 더 좋은걸까요? 아니면 stack이나 queue를 사용할 일이 있을지 궁금합니다!
-
해결됨카카오 코테 6주 합격! 실전 파이썬 코딩테스트
오류
밑이 10인 log10(2)는 약 23정도 되는데 뭔가 잘못된것같습니다.
-
해결됨카카오 코테 6주 합격! 실전 파이썬 코딩테스트
재귀
안녕하세요 수강자입니다.현재 2진수로 변환할때의 재귀함수 호출부분을 듣고있습니다. 1.종료조건, 2.재귀조건 3.데이터통합 으로 심플하게 나눠서 생각하는 방법 알려주셔서 감사합니다. 하지만 재귀함수를 할때, 스택의 개념을 설명해주지 않으셔서 뭔가 2% 개념이 부족한 느낌을 받았습니다. 완전 초보자 입장에서, 코드를 한줄한줄씩 공책에 써가며 결과값이 어떻게 나오는지 확인하는 과정중에, 설명해주신 개념과 풀이법이 직관적이며 머리에 쏙쏙박히기는하는데 왜 그렇지 하는 생각이 들어서요.
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
1-F 질문있습니다
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.https://inf.run/e3oLMabcdefghijklmnopqrstuvwxyz를 입력해서 해본 결과 r 까지는 잘 나오는데 s부터는 출력하였을 때 이상한 값들이 들어갑니다.(한글이 들어갑니다) 어느 부분에서 잘못된 것인지 알 수 있을까요?(대문자는 잘 나오는 것을 확인하였습니다) 혹시 아스키 코드표에 나와있는 값을 넘어가는 값이 저장되었다가 값을 빼주는 과정에서 코드표를 넘어가는 값이 저장되면서 오류가 발생한 것인가요?
-
해결됨김영한의 실전 자바 - 중급 2편
배열의 가장 앞쪽에 요소를 추가할때 의문점
배열의 가장 앞쪽에 요소를 추가할때, 기존의 요소를 전부 한 칸씩 오른쪽으로 옮기고 나서 확보된 빈 공간에 추가해야한다는건 이해했습니다! 그런데 곰곰히 생각해봤는데 그냥 배열자체의 시작 주소값을 한칸 앞으로 당기고 거기다가 새로운 요소를 추가하면 빅오 표기법상 O(1)? O(2)? 가 되는거 아닌가요? 예를들면 int[]의 기존 주소값이 x100이었다면 x96으로 옮기고 새로운 요소를 거기다 추가해주는거죠 주소값 자체를 명시적으로 할당하는 문법이 있는지 없는지는 모르겠지만 어쨋든 내부적으로는 그렇게 작동하도록 언어를 구현할수도 있는거아닌가요?? 그런데 당연히 이렇게는 안되니까 안하는것일텐데, 몇시간동안 생각해봐도 안되는 이유가 안떠올라서 질문드립니다 ㅠㅠ
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
vector, array 관련 질문
안녕하세요 공부 중에 궁금한 점이 있어서 문의드립니다. 큰돌님께서는 보통 vector을 잘 사용하지 않으시고, 문제에서 주어진 최대 크기+여유분 만큼의 array를 선언해서 사용하시는 것으로 보이는데, array를 사용하는게 더 이점이 큰건지 아니면 그냥 취향 차이인건지 궁금합니다!
-
미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
제 코드의 어떤 부분이 틀린지 모르겠습니다. (GPT도 오답인 케이스를 못찾아요..)
package section_2; import java.util.ArrayList; import java.util.Arrays; import java.util.Comparator; import java.util.Scanner; public class GetRank { public static ArrayList<Integer> solution(int[] scores) { ArrayList<Integer> list = new ArrayList<>(); Integer[] sortedScores = new Integer[scores.length]; Arrays.setAll(sortedScores, i -> scores[i]); Arrays.sort(sortedScores, Comparator.reverseOrder()); System.out.println(Arrays.toString(scores)); System.out.println(Arrays.toString(sortedScores)); for (int score : scores) { for (int j = 0; j < scores.length; j++) { if (score == sortedScores[j]) { list.add(j + 1); break; } } } return list; } public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int[] scores = new int[n]; for (int i = 0; i < n; i++) { scores[i] = sc.nextInt(); } for (Integer i : solution(scores)) { System.out.print(i + " "); } } }
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
백트래킹, 비트마스킹 질문입니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요! 자바로 풀이하고 있는 학생입니다.비트마스킹 부분 강의를 듣던 중에 백트래킹으로 대부분 다 해결이 되는 것 같다고 느꼈습니다. 비트마스킹 암기와 이해가 조금 어려운 것 같은데 꼭 알고 가는게 좋을까요?
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
안녕하세요! 교안 관련은 아니고, c++ 코딩테스트 관련해서 질문 드려요
삼성전자 서류 합격을 받아서, 이번주 일요일에 코딩테스트를 보게 되었는데요. 1. 교안엔 <bits/stdc++.h>를 사용할 수 있다고 나오는데, 이건 코드를 제출하는 창에서 사용 가능한거고, 실제로 문제를 푸는 visual studio 2022 환경에선 사용이 안되는 거라고 봐도 될까요? 제가 알기론 visual studio 2022 환경에선 따로 stdc++.h 파일을 받아서 특정 디렉토리에 넣어야 가능한 걸로 알고 있거든요. 제가 원래는 맥북을 사용하다가 시험장에선 윈도우를 사용해야 하는 상황인데, visual studio 에서 c++로 시험을 볼때 주의해야 할 사항이나 세팅 사항이 있는지 궁금합니다.긴글 읽어주셔서 감사합니다. 좋은 강의 잘 듣고 있습니다!
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
6주차 교안
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 6주차부터는 왜 교안이 없나요..?!
-
해결됨세계 대회 진출자가 알려주는 코딩테스트 A to Z (with Python)
다익스트라 음수 간선
다익스트라는 음수 간선이 존재하는 경우 사용할 수 없다 라고 하셨는데 다익스트라 개념 강의에 나온 예시 코드의 경우에는 음수 간선이 존재해도 사용할 수 있는거 아닌가요? 이미 방문한 노드(최단경로를 확정한 경우)를 다시 방문하지 않는다면 음수 간선이 존재하면 최단 경로를 구할 수 없을것 같은데 강의에 나온 예시 코드는 방문을 했더라도(최단 경로를 확정 했더라도) 다시 heap에서 꺼내어 비교하는 과정이 있으므로 음수 간선이 존재해도 가능할 것 같아 질문드립니다.
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
3-B번 질문 있습니다!
3-B번 보물섬 문제를 풀다가. 각 육지마다 BFS를 하는 것보다, 한 컴포넌트에서 BFS_1로 임의의 한 점에서 가장 먼 점을 찾고, 찾은 가장 먼 점에서 BFS_2로 또 가장 먼 점을 찾으면, 해당 컴포넌트에서는 가장 먼 점의 길이를 구할 수 있다고 생각하고 풀이하였는데 틀린 이유를 잘 모르겠습니다...이렇게 풀면 틀린 이유가 있을까요??항상 수업 너무 잘 듣고 있습니다. 감사합니다!#include <bits/stdc++.h> using namespace std; int n, m; string a; char mapp[54][54]; bool visited[54][54]; int dis[54][54]; int dy[] = {0,-1,0,1}; int dx[] = {1,0,-1,0}; queue<pair<int,int>> q; queue<pair<int,int>> q2; int max_val = 0; pair<int,int> bfs_1(int y, int x){ visited[y][x]=1; q.push({y,x}); pair<int,int> here; while(q.size()){ here = q.front(); q.pop(); for(int i=0;i<4;i++){ int ny = here.first + dy[i]; int nx = here.second + dx[i]; if(ny<0||nx<0||ny>=n||nx>=m) continue; if(visited[ny][nx]) continue; if(mapp[ny][nx]=='W') continue; visited[ny][nx] = 1; q.push({ny,nx}); } } return here; } int bfs_2(int y, int x){ dis[y][x] = 1; q2.push({y,x}); pair<int,int> here; while(q2.size()){ here = q2.front(); q2.pop(); for(int i=0;i<4;i++){ int ny = here.first + dy[i]; int nx = here.second + dx[i]; if(ny<0||nx<0||ny>=n||nx>=m) continue; if(dis[ny][nx]>0) continue; if(mapp[ny][nx]=='W') continue; dis[ny][nx] = dis[here.first][here.second] + 1; q2.push({ny,nx}); } } return dis[here.first][here.second]; } int main(){ cin >> n >> m; for(int i=0;i<n;i++){ cin >> a; for(int j=0;j<a.length();j++){ mapp[i][j] = a[j]; } } for(int i=0;i<n;i++){ for(int j=0;j<m;j++){ if(mapp[i][j]=='W') continue; if(visited[i][j]) continue; pair<int,int> ret_1 = bfs_1(i,j); int max_dis = bfs_2(ret_1.first, ret_1.second) -1; max_val=max(max_val,max_dis); } } cout << max_val; return 0; }
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
자바스크립트로 포팅하는 방법
안녕하세요 강사님, 좋은 강의 제공해주셔서 감사합니다!저는 프론트엔드 개발자를 희망하여 JS 외 다른 언어 경험은 없는 상태입니다 ㅜ그래서 다름이 아니라, C++를 JS로 포팅하는 방법 관련해서 질문이 있습니다:) (0주차 + 교안)을 학습하고 주차별로 학습을 하려고 하는데 예를 들어 next_permutation()와 같이 JS에 없는 함수 및 C++에서만 제공되는 문법의 경우, 그때그때 next_permutation() 동작 원리를 찾아보면서 JS로 구현해보는 연습을 병행하는 것이 효율적일까요?아직 JS에 비해 C++ 및 알고리즘 경험이 많지 않다보니, 학습을 하면서 그 자체를 이해하려고도 하지만 자연스럽게 JS라면? 이라는 생각을 계속 하다보니 진도가 나가지 않는 것 같습니다.. 이렇게 학습하는 것이 맞는지도 조금 의구심이 들어서 혹시 이 부분에 대해서도 강사님의 명쾌한 조언을 듣고 싶습니다!중복되는 질문이지만, 정리해보면 JS로의 포팅을 중간중간 따라가는 방법과 일단은 JS는 고려하지 않고 C++ 알고리즘 자체를 구현하는 방법을 학습 후, 추후 한꺼번에 JS로 포팅하는 방법 중 권장되는 방식도 궁금합니다:)좋은 강의 제공해주셔서 감사드립니다.
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
8-F 유형의 문제를 풀 때 어려운 점
안녕하세요 큰돌님.8-F처럼 톱니바퀴나 다이얼을 돌려서특정한 상태로 만드는 데 필요한 최소 횟수를 구하는 문제를 풀 때 어려운 점이 있습니다.이런 문제의 풀이는 주로 왼쪽 아니면 위쪽부터 탐색을 진행해 답을 찾습니다.하지만, 저는 내심 이런 불안감이 듭니다.'만일 최적의 횟수가 맨 위가 아니라, 중간이나 맨 하단에서 다이얼을 돌리는 방법에서 비롯된 거면 어떡하지'.'현재 위치 N에서 다이얼을 맞추지 않고, 그 다음의 위치에 있는 다이얼을 먼저 맞춘 후, 다시 위치 N으로 돌아와서 다이얼을 맞추는 게 최적일 수도 있지 않을까.'위와 같이 다양한 가능성을 염두하니, 풀이법을 떠올리는 데 어려움이 많습니다.제가 문제를 접근하는 방식이 어디가 잘못되었는지, 어떻게 고쳐야 하는 지 궁금합니다
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
백준 1911번 문제 정렬후 현재 위치를 갱신해가면서 찾을 수도 있지 않나요?
저는 물웅덩이가 시작되는 위치를 기준으로 정렬을 한 뒤에 현재 위치를 0으로 잡고 만약 물웅덩이가 시작되는 위치가 현재 위치보다 크다면 현재 위치는 물웅덩이 위치로 한뒤 현재 위치 = 현재 위치 + 널빤지 위치, 만약 현재 위치가 물웅덩이가 시작되는 위치보다 크고 물웅덩이가 끝나는 위치보다 작은 경우 현재 위치 = 현재 위치 + 널빤지 위치.이런식으로 현재 위치를 갱신해가면서 답을 구했는데 이 접근법은 이 문제에서만 유효한가요?아래는 자바 코드 입니다.package _5thweek; import java.util.PriorityQueue; import java.util.Scanner; public class Baekjoon1911 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int l = sc.nextInt(); PriorityQueue<int[]> pq = new PriorityQueue<>((a, b) -> { if (a[0] > b[0]) { return 1; } else if (a[0] < b[0]) { return -1; } return 0; }); for (int i = 0; i < n; i++) { int start = sc.nextInt(); int finish = sc.nextInt(); pq.add(new int[]{start, finish}); } int ans = 0; int cur = 0; while (!pq.isEmpty()) { int[] poll = pq.poll(); int start = poll[0]; int end = poll[1]; while (cur < end) { if (cur < start) { cur = start; } ans += 1; cur += l; } } System.out.println(ans); } }
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
2-Q 2636 시간초과
안녕하세요 2636번 치즈 문제 질문 드립니다.https://inf.run/LM71Q위와같이 행렬을 두개 만들어서 풀었는데 시간 복잡도가 10,000,000을 넘을 것 같진 않은데 자꾸 시간 초과가 뜨는 것 같습니다. 혹시 이 부분에 대해 어떻게 해야할 지 답변 주시면 감사하겠습니다.
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
1-H 질문있습니다
안녕하세요 강사님1-H 문제에 대해서 강사님과 다른 방법으로도 풀어보았는데(https://inf.run/L1p8z) 강사님의 구간합 방법(https://inf.run/4mSTg) 보다 시간이 20ms 가량 높게 나와서 궁금증에 질문드립니다. 구간합의 반복횟수 보다 적게 반복 한 것 같은데, 내부에 분기문과 queue 사용으로 인해 시간이 더 늘어나게 된걸까요? 맞다면 queue의 처리는 O(1)으로 알고 있어서 분기문과 queue 중 처리 속도 증가의 원인을 꼽자면 분기문이 더 큰 비중을 차지하는지도 궁금합니다 퀄리티 높은 강의와 지속적인 피드백 늘 감사드립니다!