묻고 답해요
169만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨김영한의 실전 자바 - 중급 2편
ArrayDeque와 LinkedList 선택 기준
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]지난 강의에서 ArrayList와 LinkedList 구현체 선택 기준이데이터를 조회할 일이 많거나 뒷 부분에 데이터를 추가,삭제가 많은 경우→ 배열 리스트앞쪽의 데이터 추가, 삭제가 많은 경우→ 연결 리스트로 알려주셨습니다. 이번 ArrayDeque와 LinkedList의 구현체 선택 기준에 대한 언급은 없는데, 실무에서 거의 ArrayDeque로만 사용해서 그런건가요? 아니면 실무에서 ArrayDeque 대신 LinkedList로 사용할 때도 ArrayList와 LinkedList의 선택 기준이랑 동일하게 앞쪽에 데이터 추가, 삭제가 많을 때 사용하나요? 강의에서는 덱의 구현체는노드 링크를 사용하는 LinkedList보다는 단순한 배열 구조로 성능이 빠른 ArrayDeque를 사용하자로 마무리하셔서 질문 남깁니다.
-
미해결비전공자의 전공자 따라잡기 - 자료구조(with JavaScript)
숙제 : 같은 값을 넣은경우 에러 처리
class Node { constructor(value) { this.value = value; this.left = null; this.right = null; } } class BinarySearchTree { constructor() { this.root = null; } #insert(node, value) { if (node.value > value) { // 루트노드보다 작은 값이면 if (node.left) { this.#insert(node.left, value); } else { node.left = new Node(value); } } else { // 숙제 : 같은 값을 넣은경우 에러 처리 (alert, throw) if (node.value === value) throw new Error(`이미 해당 ${value}가 존재 합니다`); // 루트노드보다 큰 값이면 if (node.right) { this.#insert(node.right, value); } else { node.right = new Node(value); } } } insert(value) { if (!this.root) { this.root = new Node(value); } else { this.#insert(this.root, value); // 숙제 : 같은 값을 넣은경우 에러 처리 (alert, throw) } } search(value) {} remove(value) {} } const bst = new BinarySearchTree(); bst.insert(8); //bst.insert(8); // Error: 이미 해당 8가 존재 합니다 bst.insert(10); //bst.insert(10); // Error: 이미 해당 10가 존재 합니다 bst.insert(3); //bst.insert(3); // Error: 이미 해당 3가 존재 합니다 bst.insert(1); //bst.insert(1); // Error: 이미 해당 1가 존재 합니다 bst.insert(14); //bst.insert(14); // Error: 이미 해당 14가 존재 합니다 bst.insert(6); //bst.insert(6); // Error: 이미 해당 6가 존재 합니다 bst.insert(7); //bst.insert(7); // Error: 이미 해당 7가 존재 합니다 bst.insert(4); //bst.insert(4); // Error: 이미 해당 4가 존재 합니다 bst.insert(13); //bst.insert(13); // Error: 이미 해당 13가 존재 합니다숙제 코드 정답일까요?
-
해결됨비전공자의 전공자 따라잡기 - 자료구조(with JavaScript)
영상 중간에 0:10 1:23초 수정에 따른 코드 최종본
class Node { constructor(value) { this.value = value; this.left = null; this.right = null; } } class BinarySearchTree { constructor() { this.root = null; } #insert(node, value) { if (node.value > value) { // 루트노드보다 작은 값이면 if (node.left) { this.#insert(node.left, value); } else { node.left = new Node(value); } } else { // 루트노드보다 큰 값이면 if (node.right) { this.#insert(node.right, value); } else { node.right = new Node(value); } } } insert(value) { if (!this.root) { this.root = new Node(value); } else { this.#insert(this.root, value); // 숙제 : 같은 값을 넣은경우 에러 처리 (alert, throw) } } search(value) {} remove(value) {} } const bst = new BinarySearchTree(); bst.insert(8); bst.insert(10); bst.insert(3); bst.insert(1); bst.insert(14); bst.insert(6); bst.insert(7); bst.insert(4); bst.insert(13); 영상 따라 했는데 안되면 해당 코드 참고 해보세용!
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
3-H 메모리 초과
안녕하세요, 큰돌님. 큰돌님의 코드랑 비교하면서 로직은 동일한 것으로 생각이 되는데, 제 코드는 메모리 초과가 나고, 큰돌님처럼 next를 { here - 1, here + 1, here * 2 }에서 가져오면 초과가 나지 않더라구요. sizeof 연산자로 확인한 결과 큰돌님 방식과 제 dx 배열의 크기는 각각 16바이트, 12바이트로 외려 제건 좀 덜 잡아먹더라구요. 차이점이라면 스택 세그먼트인가, 데이터 세그먼트인가 밖에 없는 것 같은데 백준 제출 시 데이터 세그먼트와 관련하여 제한사항이 있을까요? 코드 첨부드립니다.http://boj.kr/d99dbf812488492db85d619c32328ef5
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
3-M 코드 질문입니다.
안녕하세요 큰돌님! 큰돌님께서 풀이해주신 방법과 제가 풀이한 방법이 좀 달라서 이 방법도 혹시 괜찮은지 궁금해서 여쭤봅니다.http://boj.kr/c5b8619d1ed146ddb24e67d078bb1cb8 visitied 대신, 순열로 생각해서 풀이했습니다.부등호 비교하는 로직은 atoi를 하지 않아도 아스키코드상으로 값이 클 것을 예상하여 직접 비교하였습니다.최대값, 최소값의 경우에는 가능한 경우의 수를 모두 벡터에 string으로 넣어 sort로 정렬한 후, 앞뒤만 가져오는 방법을 사용했습니다. 혹시 이 방법이 아니라 원복을 사용하신 이유가 순열을 만들때 추가로 사용되는 시간 때문인가요?
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
2-L 궁금한점이 있습니다!
안녕하세요 큰 돌님 항상 영상 잘 보고 있습니다! 다름이 아니라 큰 돌님 코드를 보면 o == 1 ? A++ : B++;를 뒤에 써주시더라구요 o==1?A++ : B++을 if문보다 위에 써주니까 답이 계속 틀리게 나오더라구요(물론 변수를 많이 쓰고 여러 조정을 해주면 풀리기는 하겠지만)왜 항상 시간 계산을 점수 업데이트 보다 먼저 해야하는 문제 풀이가 더 쉬운지 잘 이해가 가지 않습니다,,,
-
해결됨김영한의 실전 자바 - 중급 2편
직접 구현한 MyHashSet
에서 데이터를 hascode로 변환하고 그 hashcode로 hashindex에 넣는거를 구현했잖아요자바 컬랙션에서 지원하는 hastSet,LinkedHashSet,TreeSet은 자바에서 hashCode는 지원하는건 알겠는데 저희가 배열에 값을 넣을때 따로 hashcode % 배열의크기 이 코드를 안넣어도되는건가요? 자바에서 hashCode도 생성해주고 hashIndex까지 생성해줘서 배열에 넣어주나요?
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
2-L질문입니다
안녕하세요 선생님 🙂 선생님 풀이를 보고 다시 한번 풀어봤는데요, 아래 코드에서 선생님 코드와의 차이점은 for문 안의 삼항 연산자가 if문의 위에 올라갔다는 점 딱 하나 밖에 없습니다. xstring헤더의 out of range 에러가 떴는데요, 이유가 뭔지 궁금합니다. 항상 도움주셔서 감사합니다 :) http://boj.kr/291382d17703486e8a8f4e790b190e1d
-
해결됨코딩테스트 [ ALL IN ONE ]
15:52 시간복잡도
강의 문제를 in list로 푸는 경우의 시간복잡도를 O(n^3)라고 하셨습니다. 잘 이해가 가지 않아 질문드립니다. for loop로 n개의 nums 모든 요소 순회 => O(n)list에 대한 in 연산 수행 => O(n)최소 한 번은 수행2번 이상의 경우 while문에서 시간복잡도 계산in 연산 수행의 반복을 while문으로 수행worst case => O(n)[1, 2, 3, 4]의 경우 n-1, n-2, n-3, n-4번 수행이걸 O(n)으로 취급하는건가요? 1.nums의 모든 요소에 대해 항상 while문이 O(n)으로 동작하지 않고 최악의 경우에도 n-1, n-2, n-3, ... 1로 줄어들지 않나요...? 아니면, 2.for loop로 n번 순회하면서while loop는 n-1, n-2, n-3번 수행하게되니두 반복문에 의한 시간복잡도는 등차수열 합의 공식에 근거해 최종적으로 O(n^2)가 되고 이 때 매번 반복하는 in연산도 O(n)이니 최종 시간복잡도는 O(n^3)다. 로 이해하는건가요? 19:47 설명 중어떻게 while이 모든 경우에 n번 수행될 수 있는건지 궁금합니다...
-
미해결김영한의 실전 자바 - 중급 2편
제네릭 타입이나 메서드를 정의할 때에 <T extends Animal>
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]제네릭 타입이나 메서드를 정의할 때에 상한 제한을 두기 위해서 <T extends Animal> 로 지정하였는데,이렇게 지정하면 <Animal> 로 지정하는 것과 같은 효과가 나는 것이 아닌가요?만약에 맞다면, 굳이 왜 T extends Animal 이라는 방법을 사용하는지 궁금합니다.
-
미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
큐로 구현
큐로 구현해서 사이트상 통과는 됐는데 혹시 코드 리뷰 부탁드려도될까요..?
-
미해결Do it! 알고리즘 코딩테스트 with C++
백준 1377 질문있습니다
기본 sort함수를 사용하면 정렬에 사용하는 알고리즘이 버블정렬과 다르게 될 텐데, 배열 내에 같은 수가 있다면 second에 저장된 인덱스값이 예상과 다르게 될 것 같습니다. 그럼에도 정답이 인정되는게 잘 이해되지 않습니다.
-
미해결비전공자의 전공자 따라잡기 - 자료구조(with JavaScript)
숙제2 연결리스트를 이용하여 큐 구현하기
학습 목표- 배열 치트키 자료구조가 아닌 연결 리스트를 이용하여 queue 자료구조를 구현하자.- 삽입과 삭제를 시간복잡도 O(1)가 되게 해야됨.- queue은 FIFO이기 때문에 삭제시 첫번째를 삭제해야됨.class Node { constructor(value) { this.value = value; this.next = null; this.prev = null; } } class LinkedList { constructor(length = 0) { this.length = length; this.head = null; this.tail = null; } add(value) { const newNode = new Node(value); if (this.head === null) { this.head = newNode; this.tail = newNode; } else { newNode.prev = this.tail; this.tail.next = newNode; this.tail = newNode; } this.length++; return this.length; } // 스택 구현시 삭제 메서드 removeLast() { const value = this.tail.value; this.tail.prev.next = null; // 제일 마지막 이전의 next의 좌표를 null로 변경해줌 this.tail = this.tail.prev; // 마지막을 tail의 이전 노드로 변경 해줌 return value; } // 큐 구현시 삭제 메서드 removeFirst() { const value = this.head.value; this.head.next.prev = null; // 제일 첫번째 다음의 이전 좌표를 null로 변경해줌 this.head = this.head.next; // 첫번째를 head next 노드로 변경 해줌 return value; } } // 숙제2 연결리스트로 큐 만들기 class Queue { linkedList = new LinkedList(); add(value) { return this.linkedList.add(value); } shift() { return this.linkedList.removeFirst(); } get top() { return this.linkedList.head.value; } get length() { return this.linkedList.length; } } const queue = new Queue(); console.log(queue.add(1)); // 1 console.log(queue.add(3)); // 2 console.log(queue.add(5)); // 3 console.log(queue.top); // 1 console.log(queue.length); // 3 console.log(queue.shift()); // 1 결과head의 value값이 3, prev가 null이 되고 next가 value가 5인 노드를 가르킴
-
미해결비전공자의 전공자 따라잡기 - 자료구조(with JavaScript)
숙제1 LinkedList로 스택 구현하기
학습 목표- 배열 치트키 자료구조가 아닌 연결 리스를 이용하여 stack 자료구조를 구현하자.- 삽입과 삭제를 시간복잡도 O(1)가 되게 해야됨.- stack은 FILO이기 때문에 삭제시 마지막을 삭제해야됨. class Node { constructor(value) { this.value = value; this.next = null; this.prev = null; } } class LinkedList { constructor(length = 0) { this.length = length; this.head = null; this.tail = null; } add(value) { const newNode = new Node(value); if (this.head === null) { this.head = newNode; this.tail = newNode; } else { newNode.prev = this.tail; this.tail.next = newNode; this.tail = newNode; } this.length++; return this.length; } removeLast() { const value = this.tail.value; this.tail.prev.next = null; // 제일 마지막 이전의 next의 좌표를 null로 변경해줌 this.tail = this.tail.prev; // 마지막을 tail의 이전 노드로 변경 해줌 return value; } } // 숙제 1 연결리스트로 스택 만들기 class Stack { linkedList = new LinkedList(); add(value) { return this.linkedList.add(value); } pop() { return this.linkedList.removeLast(); } get top() { return this.linkedList.head.value; } get length() { return this.linkedList.length; } } const stack = new Stack(); console.log(stack.add(1)); // 1 console.log(stack.add(3)); // 2 console.log(stack.add(5)); // 3 console.log(stack.top); // 1 console.log(stack.length); // 3 console.log(stack.pop()); // 5결과디버거 결과를 확인 해보면 최종적으로tail의 value는 3이고 next는 null prev는 value1의 노드를 가르키고 있는걸 알 수 있다.
-
미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
이중 for로만 간단하게 풀어봤습니다. 괜찮을까요?
const solve = (arr) => { let count = 0; let u = 0; let r = 0; let d = 0; let l = 0; for (let i = 0; i < arr.length; i++) { for (let j = 0; j < arr.length; j++) { let my = arr[i][j] u = i !== 0 ? arr[i - 1][j] : 0 r = j !== arr.length - 1 ? arr[i][j + 1] : 0 d = i !== arr.length - 1 ? arr[i + 1][j] : 0 l = j !== 0 ? arr[i][j - 1] : 0 if (my > u && my > r && my > d && my > l) { count += 1 } } } return count }
-
미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
LinkedList를 사용해서 풀어도 되나요?
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.package sorting; import java.util.LinkedList; import java.util.Scanner; public class LRUMain { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int s = scanner.nextInt(); int n = scanner.nextInt(); LinkedList<Integer> cache = new LinkedList<>(); int[] tasks = new int[n]; for (int i = 0; i < n; i++) { tasks[i] = scanner.nextInt(); } for (int task : tasks) { if (cache.contains(task)) { cache.remove(cache.indexOf(task)); } cache.addFirst(task); if (cache.size() > s) { while (cache.size() > s) { cache.removeLast(); } } } for (int element : cache) { System.out.print(element+" "); } } }위 방식으로 접근해도 되나요?
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
2-I 재질문입니다..!!
안녕하세요 선생님 🙂 급한 마음에 질문하는 양식에 맞춰 질문하지 않았던 것 같습니다 죄송합니다 ㅠㅠ http://boj.kr/436a553bbbb24930908a3c7450ef7599 else if (result.size()) func();위의 코드는 str[i]가 숫자가 아니면서 result의 size가 1 이상일 경우라고 이해했습니다. 약간의 변형을 위하여 else if가 아닌 if문으로 변경하여 아래와 같이 변경했더니 결과 값이 이상해졌습니다.if (str[i] >= 97 && result.size()) func(); 이외에도 다방면으로 접근해봤지만 전부 결과 값이 이상하게 나왔습니다. 도대체 저 코드가 의미하는 것이 뭘까요..?? ㅠㅠ
-
미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
강사님 이렇게 풀어봤습니다.!
const solve = (arr) => { const result = [] for (let i = 0; i < arr.length; i++) { let count = 1 for(let j = 0; j < arr.length; j++) { if (arr[j] > arr[i]) { count += 1; } } result.push(count); } return result }조금 간단...해..보이게..?처음에 count 를 1로 줘서 1등으로 시작하고 풀이해주신 부분과 비슷하지만 살짝은,, 다르게 풀어봤습니다.
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
4-H 코드 한 번 봐주실 수 있으신가요?ㅎㅎ
안녕하세요 큰돌선생님! 늘 제가 먼저 해보고 선생님 코드를 보는데, 제 코드랑 달리 선생님 코드는 너무 깔끔해서 항상 감동합니다.. 늘 감사합니다다름이 아니라,http://boj.kr/3f2dfd5dd72a45e69326ea4b3d0e2216저는 이 문제에서 마지막 벽 하나 없애는 부분을 비트마스킹으로 경우의 수를 만들어서 싹 돌려줬는데요.. 5중 for문..ㅋㅋ으로 시간초과 뜰줄 알았으나 다행히(?) 맞았습니다가 뜨긴했는데 불안해서요.. 이런식으로 짜는 건 많이 비추하시나요?ㅠㅠ 실제 코테였다면 이렇게 하는게 위험한 방법인지 궁금해서 한 번 질문드려요!! 좋은 하루 보내세요!!
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
2-I 재질문있습니다
안녕하세요 선생님 🙂 다른 문제들을 풀다가 질문드렸던걸 까먹었었네요 ㅠㅠ 드렸던 질문은 해결되었지만 문제를 다시 들여다보니 이해가 가지 않는 부분이 하나 더 있어서 다시 질문드립니다. else if (result.size()) func();위의 코드는 str[i]가 숫자가 아니면서 result의 size가 1 이상일 경우라고 이해했습니다. 약간의 변형을 위하여 else if가 아닌 if문으로 변경하여 아래와 같이 변경했더니 결과 값이 이상해졌습니다.if (str[i] >= 97 && result.size()) func(); 이외에도 다방면으로 접근해봤지만 전부 결과 값이 이상하게 나왔습니다. 도대체 저 코드가 의미하는 것이 뭘까요..?? ㅠㅠ