묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨김영한의 실전 자바 - 중급 2편
코드오류 질문
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.package collection.set.test; 의 RetangleTest 클래스에 관한 질문입니다package collection.set.test;import java.util.HashSet;import java.util.Set;public class RetangleTest { public static void main(String[] args) { Set<Retangle> retangleSet = new HashSet<>(); retangleSet.add(new Retangle(10,20)); retangleSet.add(new Retangle(20,10)); retangleSet.add(new Retangle(30,30)); for (Retangle retangle : retangleSet) { System.out.println(retangle); } }}중복된 값은 출력하지않아야하는데예시코드를 돌려보아도 중복된값을 출력하고있는 문제가있습니다package collection.set.test;import java.util.Objects;public class Retangle { private int width; private int height; public Retangle(int width, int height) { this.width = width; this.height = height; } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; Retangle retangle = (Retangle) o; return width == retangle.width && height == retangle.height; } @Override public int hashCode() { return Objects.hash(width, height); } @Override public String toString() { return "Retangle{" + "width=" + width + ", height=" + height + '}'; }}이거는 Retangle 클래스입니다hashCode , eqauls를 오버라이딩했는데도 중복출력이되네요
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
8-K 펜윅트리 구간합 구하기 범위 질문 드립니다.
안녕하세요 큰돌님?오늘은 문제 입력의 범위가 이해가 안되서 질문 들고 오게 되었습니다.8-K 문제 입력 범위는 long long으로 이해가 됐는데요, 그에 맞게 tree 도 long long 까지 해설에서 선언을 해주셨습니다 근데 입력받는 n의 개수가 1~100만개 이므로tree 벡터 안에 구간합이 범위 초과가 나진 않는가요?worst로 (2^-63)-1 이 연속으로 들어오는걸 가정하고 있습니다. 이 문구 때문에 long long 그대로 진행해도 범위 초과가 안나는게 맞을까요? 답변 미리 감사합니다.
-
해결됨카카오 코테 6주 합격! 실전 파이썬 코딩테스트
안녕하세요. 혹시 강의에 사용되는 자료 받을 수 있을까요
기본 개념 설명, 기본 연습문제 등 강의하실 때 사용하시는 슬라이드, 강의 노트 같은 자료도 받을 수 있을까요.
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
변수 선언을 내부에서 해도 문제없나요?
안녕하세요 선생님. 강의 잘 보고 있습니다.당근카 답안코드에서 선생님은 큐와 ny nx를 메인 함수 내부에서 선언하셨습니다. 맨 처음에 사용할 모든 변수를 선언해놓는 것과 선생님의 방식 사이에서 궁금한 것이 생겼습니다. 제 생각에는 선생님의 방식대로면 상대적으로 조금 더 흘러가는 대로 자유롭게 코드를 짤 수 있을 것 같습니다. 하지만 혹시 코드가 복잡해지면 헷갈려서 실수 가능성이 올라가진 않을까 생각도 듭니다.그래서 그 둘을 그저 취향 차이로 여겨도 되는지 아니면 편의성과 성능 측면에서 우세한 것이 있는지 알고 싶습니다.감사합니다. - 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
-
미해결김영한의 실전 자바 - 중급 2편
타입 이레이저 동작방식 질문입니다!
안녕하세요! 이번에 정처기 문제에서 타입 이레이저 관련 문제가 나왔는데, 궁금한 점이 생겨서 질문 올려봅니다.class Printer { void print(Integer a) { System.out.print("A" + a); } void print(Object a) { System.out.print("B" + a); } void print(Number a) { System.out.print("C" + a); } } public class Gisafirst { public static void main(String[] args) { new Container<>(0).print(); } public static class Container<T> { T value; public Container(T t) { value = t; } public void print() { new Printer().print(value); } } }제가 이해한 바로는, 강의에서 설명해주신대로 new Container<>(0)에서 public static class Container<Integer> { Integer value; public Container(Integer t) { value = t; } public void print() { new Printer().print(value); } }컴파일러가 컴파일 시점에 이렇게 이해하고 나서 컴파일 종료 후, 타입 소거가 일어나서, Object로 변환한다고 이해했습니다.그래서 print 메서드를 호출할 때 value는 Object 타입이므로 B0가 출력되는 것이죠.여기서 궁금한 점은 바로 print의 오버로딩 메서드 선택 시점입니다. 제가 찾아본 바로는 오버로딩 메서드 선택시점은 컴파일 단계에서 이루어진다로 알고있습니다. 그렇다면 동작방식이 컴파일 종료 후 타입 소거가 일어나는게 아니라, 정확히는"컴파일 시작 - 타입 소거 - 오버로딩 메서드 선택 - 컴파일 종료 - 런타임" 이런식으로 일어나는건가용?아니면 어디서 오해하고 있는지 궁금합니다!
-
미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
for loop 탈출은 return 문으로 해도 되지 않나요?
일곱난쟁이 문제에서, 가짜 난쟁이 둘을 발견 후에 for loop를 멈출 때 splice를 한 arr를 for loop에서 return arr 하면 전체 for loop에서 탈출하는데 그걸 사용해도 되지 않나요?
-
미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
안녕하세요 선생님 다른방식으로 BFS를 풀어봤는데 어떤게 더 좋은 효율인가요?
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.package DFS_BFS; import java.util.*; class Point { int x, y; Point(int x, int y) { this.x = x; this.y = y; } } public class Main22 { static int n, m; static int[][] box; static int answer = 0; static int dx[] = {-1, 0, 1, 0}; static int dy[] = {0, 1, 0, -1}; static boolean flag = true; public static void BFS() { Queue<Point> Q = new LinkedList<>(); // 처음에 익은 토마토를 큐에 추가 for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { if (box[i][j] == 1) { Q.offer(new Point(i, j)); } } } while (!Q.isEmpty()) { int size = Q.size(); for (int s = 0; s < size; s++) { Point tmp = Q.poll(); for (int i = 0; i < 4; i++) { int nx = tmp.x + dx[i]; int ny = tmp.y + dy[i]; if (nx >= 0 && nx < n && ny >= 0 && ny < m && box[nx][ny] == 0) { box[nx][ny] = 1; Q.offer(new Point(nx, ny)); } } } answer++; // 한 레벨 탐색이 끝나면 answer 증가 } answer--; // 마지막 레벨에서 더 증가된 값을 보정 } public static void main(String[] args) { Scanner sc = new Scanner(System.in); m = sc.nextInt(); n = sc.nextInt(); box = new int[n][m]; // 초기 박스 상태 설정 for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { box[i][j] = sc.nextInt(); if (box[i][j] == 0) flag = false; } } // 이미 모두 익었으면 0 출력 if (flag) { System.out.print(0); return; } // BFS 수행 BFS(); // 모든 칸이 익었는지 검사 flag = true; for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { if (box[i][j] == 0) { flag = false; break; } } if (!flag) break; } // 결과 출력 System.out.print(flag ? answer : -1); } } 선생님께서는 dis배열을 만들어서 푸셨는데 저는 생각할때 box배열에 있는 0들을 없앤다는 식으로 생각해서 이런식으로 풀었는데 어떤게 더 효율이좋나요? 이것도 맞는 풀이일까요?
-
해결됨김영한의 실전 자바 - 중급 2편
해시 충돌에 대해서 질문이요
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요. 궁금증이 생겨서 질문을 올립니다.해시 리스트? 를 만들고, 데이터를 넣다 보면 어쩔 수 없이 해시 충돌이 일어날 수 밖에 없을것 같은데요.여기서 질문이 생깁니다.영한님이 쓰신 대로 링크드 리스트를 이용해서, 해시 리스트를 만들었다고 치고데이터를 넣다 보니, 해시 충돌이 여러 번 일어나는 경우가 생겼습니다. 여기서 해시 충돌이 몇번 일어 나는게, 최악의 상황인가요?캐파시티를 40개 로 해 놓고, for문으로 8만개의 숫자를 넣어보니사진처럼 나오던데요. (제컴 기준 i3, 렘16기가)즉 질문은해시 충돌을 계속 일으켜야 하는 상황 이라면, 해시 충돌을 몇 번 일으 키는게 메모리 상? 안전한가요?답변 부탁 드립니다.
-
미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
질문
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 송아지 찾기 ch = new int[10001];10001 로 선언하는 이유가 확실히 이해가 가지 않아요...범위가 1부터 10000인데 왜 ch 배열의 크기는 10001로 설정하셨나요...?ㅠㅠ 감사합니다.
-
미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
투포인트알고리즘으로 풀어봤습니다.
투포인트 알고리즘을 생각하고 풀어봤는데 슬라이딩 알고리즘과 투포인트중에 어떤걸 선택해도 상관 없는건가요 ?/** *@function 최대매출 *@description 최대매출 알고리즘 문제 풀이 */ function solution(m, arr) { let answer = 0; let sum = 0; let lt = 0; let n = arr.length; for (let i = 0; i < m; i++) { sum += arr[i]; } answer = sum; for (rt = m; rt < n; rt++) { sum += arr[rt] - arr[lt++]; if (answer < sum) { answer = sum; } } return answer; } let arr = [12, 15, 11, 20, 25, 10, 20, 19, 13, 15]; console.log(solution(3, arr));
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
7-B Check함수 질문있습니다
안녕하세요, 대각선 방향일 때 check함수에서 a[y-1][x] ==0 && a[y][x-1]==0 이 조건부가 왜 필요한지 모르겠습니다 ㅠ.만약, 선생님의 변수명대로 설정하고n=3,a배열:[0] [0] [0][0] [0] [1][0] [1] [0]if(check(2,2,1)) dp[2][2][1] += dp[1][1][1]; 로직에서 check함수를 호출햇을 때를 가정하면,a[1][2] 와 a[2][1]이 벽이더라도 갈수 있지 않나요? 때문에 check함수에서 true를 반환해야한다고 생각됩니다ㅠㅠ
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
3-N 해설 코드 의견 있습니다.
있어서 나쁠건 없지만, 반드시는 필요하지 않은 코드라고 생각합니다.이미 if(s>e) return 에서 모든 기저사례를 담당해주고 있습니다. 아래 스샷 7~10 라인을 지워서 제출해도 물론 정답입니다.http://boj.kr/feca52c9e36a47cf8d9ee4d51dcc6251 더 짧은 코드를 추구하신다면 반영해도 좋을 것 같아 의견 남깁니다.
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
3-D 질문있어요.
안녕하세요 큰돌님.fire_check[i][j] = 1, person_check[sy][sx] = 1; 이 부분에서 1로 시작하는 이유가 탈출을 가정하기 때문에 0부터 시작하면 가장자리 도착시 + 1을 해주어야해서 편의상 1부터 시작하는 것일까요? 아니면 다른 이유가 있을까요?
-
미해결김영한의 실전 자바 - 중급 2편
Tree
혹시 스택,큐,set, hash등의 강의는 있는데, tree 에 대한 강의는 없는 것 같은데 다른 편에서 Tree 에 대해서 어느정도라도 다루어주시나요 ?
-
미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
코드 리뷰 부탁드립니다.
문제를 보고 제가 직접 먼저 풀어봤는데 답은 맞게 나오는데 , 뭔가 좀 허술한 부분이 있을거 같아서요 ,코드 리뷰좀 부탁드립니다. function solution(a, b, c) { let cnt = 0; let sum = 0; let lt = (rt = 0); while (lt < a && rt < a) { rt++; sum += c[rt]; if (sum === b) { cnt++; lt++; sum -= c[lt]; } } return cnt; }
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
코드 작성 질문
안녕하세요 큰돌님본 강의에서 설명해주신 것처럼 재귀함수가 호출되는 흐름에 대해서는 이해했습니다.그런데 코드와 함수 호출되는 흐름이 직관적으로 연결되지는 않는것 같습니다. 무슨 말이냐면 본 강의의 코드는 모르고 재귀함수의 개념과 흐름만 알고 있다는 전제하에 코드를 작성해야 한다면 못하겠다라는 생각이 들었습니다.저 혼자서 다시 코드를 작성해보았을 때 이 재귀함수의 흐름을 이해하긴 했지만 그걸 토대로 작성하기보다 외워서 쓰게되는 느낌을 받았습니다.그래서 이런 재귀함수의 흐름과 원리를 이해하고 코드는 외워서 쓰는 방식으로 해야하는 건지 아니면 아직 제 이해도가 부족해 코드로 옮기지 못하는 것인지 궁금합니다.
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
7-L 재귀적 풀이 질문있습니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요 선생님해당 문제를 재귀적으로 풀고 테스트케이스 모두 통과하는데 틀렸다고 나옵니다..혹시 어떤 부분이 잘못됬는지 봐주시면 감사하겠습니다.85717547번 소스 코드
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
8-C
int go(int here, int num, int prev){ if(here == v.size()) return 0; if(dp[here][num]) return dp[here][num]; int cost = max(0, t - v[here].second); int real_cost = (prev >= cost) ? 0 : cost - prev; int & ret = dp[here][num]; if(num - real_cost >= 0){ return ret = max(go(here + 1, num - real_cost, cost)+ v[here].first, go(here + 1, num, 0)); }else return ret = go(here + 1, num, 0); }go()함수에서 ret를 대입하는 부분에서 이해가 가질 않습니다.if(num - real_cost >= 0) 의 경우첫번째 인자는 친구를 투입한 경우 이므로 cost만큼의 부족한 인원의 친구가 있기때문에 cost를 넘겨주는 것으로 이해했습니다.두번째 인자에서 0으로 넘겨주는데 이전에 투입된 친구들은 그대로 있어야 하니까 0이 아닌 prev를 넘겨줘야하는 것 아닌가요? 왜 0으로 넘겨주는 것인가요?
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
비트마스킹 질문
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.안녕하세요 선생님 비트마스킹의 어려움 때문에 복습하고 있는데 1~20 까지 수들의 이진수를 외워 두는게 도움이 될까요???
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
8-B 질문 있습니다.
퀘스트를 한개씩 풀며 str, int를 비교하고 가능하면 point를 받아 이를 str과 int에 분배하며 최대한 많이 푸는 문제 이해서 static int go (int STR, int INT) { if(dp[STR][INT] != -1) return dp[STR][INT]; dp[STR][INT] = 0; int point = 0; ArrayList<Integer> list = new ArrayList<>(); for (int i=0; i<n; i++) { if(arr[i][0] <= STR || arr[i][1] <= INT) { if(!visited[i]) { visited[i] = true; for (int j=0; j<=arr[i][2]; j++) { int a = Math.min(1000, STR +j); int b = Math.min(1000, INT+arr[i][2]-j); dp[a][b] = Math.max(dp[a][b], go(a, b)+1); } visited[i] = false; } } } return dp[STR][INT]; }이렇게 풀어야한다고 생각합니다. 즉 1번 퀘스트가 현재 능력치로 해결 가능하면 1. 방문처리2. 그 포인트로 str, int에 분배하면서 다시 재귀2 -1 . 현재 퀘스트를 해결한 것이니 go()재귀 다녀온 결과의 +1 함3. 방문처리 해제하지만 이렇게 접근하면 정답이 안되더라구요 왜 이 코드가 불가능한지 궁금합니다.그래서 강사님 코드가 더더욱 이해가 가지 않습니다.제가 문제를 잘 못 이해한건가요?현재 str, int에서 최대한 한번에 해결할 수 있는 것을 모아서 한번에 해결하고 그 포인트를 모아서 분배하는 방법이 이해가 가지 않습니다. 포인트 분배는 마음대로니까 str, int 모두 point 분배를 전혀 안한 경우를 포함한 경우라고 생각하면 될까요?이해가 가지 않는 코드부분은 for(int i = 0; i < n; i++){ if(a[i].x <= STR || a[i].y <= INT){ ret++; // <-- 요부분과 if(!visited[i]){ visited[i] = true; pnt += a[i].c; // <-- 요부분입니다 v.push_back(i); } } }