묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결
인프런 할부 결제방법
강의가 비싸서 할부로 결제하려는데, 어디서 설정이 가능한가요?일반 결제창에는 할부 관련 내용이 없고, 강의에서도 할부를 추천하는데....
-
해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
자바와 스프링 버전 변경 방법
수업에 사용되는 파일의 스프링 버전을 변경하려면 어떻게 해야하나요?버전이 17일 때는 한글이 나오는데 그 외의 버전은 한글이 깨져서 나옵니다ㅠㅠ수업에 사용되는 파일의 버전은 자바 11, 스프링 2.4.4입니다.
-
해결됨쉽게 설명하는 AWS 기초 강의
PPT제공
강의 PPT를 받아보고싶은데 방법이 없을까요?
-
미해결김영한의 실전 자바 - 중급 2편
List.of 질문
안녕하세요.Arrays.asList()는 ArrayList를 반환하는 걸 확인했는데List.of()는 결과적으로 new ListN<>(tmp, false); 다음과 같은 ListN 객체를 반환하던데 이게 어떤 것인지 궁금합니다.List 구현체로 알고 있으면 될까요 ?
-
미해결입문자를 위한, HTML&CSS 웹 개발 입문
깃허브 링크 주소
안녕하세요 강의 감사드립니다깃허브 주소를 못찾아서 링크를 받을 수 있을까요?
-
미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
합이 같은 부분 집합 문제 질문 드립니다.
안녕하세요, 강의 잘 듣고 있습니다.작성한 코드 실행 시 테스트 케이스 4번에서만 오답처리 되어 확인을 해봤습니다.4번째 테스트 케이스인 9, [3 6 13 11 7 16 34 23 12] 를 입력한 후 디버깅을 해본 결과실제로 중복집합이 발생하는 것으로 확인됐습니다.제 코드 상에 어떤 부분이 문제가 됐는지 알고 싶습니다.import java.util.Collection; import java.util.HashMap; import java.util.Map; import java.util.Scanner; public class Main { static int level; public static void main(String[] args) { Scanner sc = new Scanner(System.in); int size = sc.nextInt(); int max = 0; int dep[] = new int[size + 1]; level = size; for (int i = 1; i < dep.length; i++) { int val = sc.nextInt(); dep[i] = val; if (val > max) { max = val; } } int[] check = new int[max + 1]; Map<Integer, Integer> map = new HashMap<>(); dfs(1, check, dep, map); Collection<Integer> values = map.values(); boolean duplicate = false; for (int i : values) { if (i != 1) { System.out.println("YES"); duplicate = true; break; } } if (!duplicate) { System.out.println("NO"); } } public static void dfs(int l, int check[], int[] depth, Map<Integer, Integer> map) { if (l == level + 1) { int sum = 0; for (int i = 1; i < check.length; i++) { if (check[i] == 1) { sum += i; } } if (sum > 0) { map.put(sum, map.getOrDefault(sum, 0) + 1); System.out.println("Sum: " + sum + ", Count: " + map.get(sum)); } } else { check[depth[l]] = 1; dfs(l + 1, check, depth, map); check[depth[l]] = 0; dfs(l + 1, check, depth, map); } } }
-
미해결김영한의 실전 자바 - 중급 2편
Set문의
안녕하세요.Set관련 2가지 질문드립니다.1. 문제풀이에서 보면 Set의 내용을 출력할 때 for-each문으로 Set의 내용을 출력하였는데, 기본적인 인덱스 접근은 아닐텐데 어떻게 for-each문으로 값을 찾아서 출력이 가능한 걸까요 ?(강의에 나온대로 hashIndex를 활용한 접근이라면 어느 index에 매핑될 지 모르니 내부에 가지고 있는 배열의 capacity만큼 다 돌아야 할 거 같아서요. 그렇다면 배열의 capacity는 default인지 아닐지 모르는데 이걸 일일히 확인하고 for문을 돌린다는 것도 이상하고요.)LinkedList 때도 문의 드린 건데 Set도 보면 toString을 따로 구현체들이 오버라이딩 하고 있지 않고 set.toString()을 찍어봐도 object에서 선언한 toString()을 가리키던데 어떻게 다음과 같이 출력이 될까요 ? System.out.println(set);[20, 10, 30]아래 질문헀던 건데 답변을 못 받아서 재질문드립니다.HashSet의 toString 코드를 보다 문의사항이 있어 질문합니다. @Override public String toString() { return "MyHashSetV2{" + "buckets=" + Arrays.toString(buckets) + ", size=" + size + ", capacity=" + capacity + '}'; }다음과 같이 되어 있고 출력을MyHashSetV2{buckets=[[Member{id='hi'}, Member{id='JPA'}], [], [], [], [], [], [Member{id='spring'}], [], [], [Member{id='java'}]], size=4, capacity=10} 이렇게 하니까 Arrays.toString(buckets) 부분이[[Member{id='hi'}, Member{id='JPA'}], [], [], [], [], [], [Member{id='spring'}], [], [], [Member{id='java'}]]이 부분일텐데 따라 들어가면 toString 오버라이딩 된 형태가 toString(Object[] a) {다음과 같고 실제 스트링으로 만드는 코드는StringBuilder b = new StringBuilder(); b.append('['); for (int i = 0; ; i++) { b.append(String.valueOf(a[i]));이거인데요.여기서 말하는 a[i]는 LinkedList<Object>[] set의 각각의 인덱스에 위치한 LinkedList<Object> 일텐데 LinkedList나 상위의 List를 타고 들어가봐도 따로 toString 메서드를 살펴볼 수 없습니다. String.valueOf(LinkedList)가 어떻게 동작하는건가요 ? 출력물 보면 각 LinkedList안에 객체로 들어간 member의 toString을 출력하는 거 같기는 한데 LinkedList를 순차척으로 도는 코드를 확인 못하겠습니다.감사합니다.
-
해결됨비전공자의 전공자 따라잡기 - 자료구조(with JavaScript)
[숙제] minHeap 구현, maxHeap -> minHeap , minHeap -> maxHeap
minHeap 구현class MinHeap { // 최소힙 arr = []; #reheapUp(index) { if (index > 0) { const parentIndex = Math.floor((index - 1) / 2); if (this.arr[index] < this.arr[parentIndex]) { const tmp = this.arr[index]; this.arr[index] = this.arr[parentIndex]; this.arr[parentIndex] = tmp; this.#reheapUp(parentIndex); } } } insert(value) { const index = this.arr.length; this.arr[index] = value; // 마지막에 값을 넣어준다. this.#reheapUp(index); } #reHeapDown(index) { const leftIndex = index * 2 + 1; // 왼쪽 Index if (leftIndex < this.arr.length) { const rightIndex = index * 2 + 2; const smaller = this.arr[leftIndex] < this.arr[rightIndex] ? leftIndex : rightIndex; if (this.arr[index] > this.arr[smaller]) { const temp = this.arr[index]; this.arr[index] = this.arr[smaller]; this.arr[smaller] = temp; this.#reHeapDown(smaller); } } } remove() { // root만 remove if (this.arr.length === 0) { return false; } if (this.arr.length === 1) { // 마지막 하나 남으면 pop해서 리턴해주기 return this.arr.pop(); } const root = this.arr[0]; this.arr[0] = this.arr.pop(); this.#reHeapDown(0); return root; } sort() { // 힙 정렬 const sortedArray = []; while (this.arr.length > 0) { sortedArray.push(this.remove()); } return sortedArray; } search(value) { for (let i = 0; i < this.arr.length; i++) { if (this.arr[i] === value) { return i; } } return null; } // 특정값 수정 update(value, newValue) { const index = this.search(value); if (index === null) { return false; } this.arr[index] = newValue; for (let i = Math.floor(this.arr.length / 2 - 1); i >= 0; i--) { this.#heapify(i); } } // 특정값 삭제 removeValue(value) { const index = this.search(value); if (index === null) { return false; } // 특정값의 index를 splice를 이용하여 없애버린다. this.arr.splice(index, 1); for (let i = Math.floor(this.arr.length / 2 - 1); i >= 0; i--) { // 이렇게 했을때 힙이 깨질 수 있기 떄문에 heapify 해준다 this.#heapify(i); } } transFormMaxHeap() { for (let i = Math.floor(this.arr.length / 2 - 1); i >= 0; i--) { // i가 2부터 시작 // 이렇게 했을때 힙이 깨질 수 있기 떄문에 heapify 해준다 this.#maxHeapify(i); } return this.arr; } // 특정값을 수정하거나 특정값을 삭제하거나 #heapify(index) { const leftIndex = index * 2 + 1; // 왼쪽 Index 78의 왼쪽 5: 23 const rightIndex = index * 2 + 2; // 오른쪽 6: undefined const smaller = (this.arr[leftIndex] || Number.MAX_SAFE_INTEGER) < (this.arr[rightIndex] || Number.MAX_SAFE_INTEGER) ? leftIndex : rightIndex; if (this.arr[index] > this.arr[smaller]) { const temp = this.arr[index]; this.arr[index] = this.arr[smaller]; this.arr[smaller] = temp; this.#heapify(smaller); } } #maxHeapify(index) { const leftIndex = index * 2 + 1; // 왼쪽 Index const rightIndex = index * 2 + 2; const bigger = (this.arr[leftIndex] || 0) > (this.arr[rightIndex] || 0) ? leftIndex : rightIndex; if (this.arr[index] < this.arr[bigger]) { const temp = this.arr[index]; this.arr[index] = this.arr[bigger]; this.arr[bigger] = temp; // 재귀 호출 해주어야 된다! this.#maxHeapify(bigger); } } }최소 힙 insertconst minheap = new MinHeap(); minheap.insert(78); minheap.insert(56); minheap.insert(45); minheap.insert(32); minheap.insert(23); minheap.insert(19); minheap.insert(8); // 결과 [8, 32, 19, 78, 45, 56, 23]결과 그림최소힙 removeconst minheap = new MinHeap(); minheap.insert(78); minheap.insert(56); minheap.insert(45); minheap.insert(32); minheap.insert(23); minheap.insert(19); minheap.insert(8); minheap.remove(); minheap.remove(); minheap.remove(); minheap.remove(); minheap.remove(); minheap.remove(); // 8 , 32, 19, 78, 45 ,56, 23 // 19, 32, 23, 78, 45, 56 // 23, 32, 56, 78, 45 // 32, 45, 56, 78 // 45, 78, 56 // 56, 78 // 78최소힙 updateconst minheap = new MinHeap(); minheap.insert(78); minheap.insert(56); minheap.insert(45); minheap.insert(32); minheap.insert(23); minheap.insert(19); minheap.insert(8); minheap.update(32, 90); // [8, 32, 19, 78, 45, 56, 23] // 결과 -> [8, 45, 19, 78, 90, 56, 23]최소힙 removeValueconst minheap = new MinHeap(); minheap.insert(78); minheap.insert(56); minheap.insert(45); minheap.insert(32); minheap.insert(23); minheap.insert(19); minheap.insert(8); minheap.removeValue(19); // [8, 45, 19, 78, 90, 56, 23] // 결과 -> [8, 45, 23, 90, 56, 78]최소힙 -> 최대힙const minheap = new MinHeap(); minheap.insert(78); minheap.insert(56); minheap.insert(45); minheap.insert(32); minheap.insert(23); minheap.insert(19); minheap.insert(8); console.log(minheap.transFormMaxHeap()); // [ 8, 32, 19, 78, 45, 56, 23 ] // 결과 -> [78, 45, 56, 32, 8, 19, 23]최대힙 -> 최소힙class MaxHeap { arr = []; #reheapUp(index) { if (index > 0) { const parentIndex = Math.floor((index - 1) / 2); if (this.arr[index] > this.arr[parentIndex]) { // 값 바꾸기 const tmp = this.arr[index]; this.arr[index] = this.arr[parentIndex]; this.arr[parentIndex] = tmp; this.#reheapUp(parentIndex); } } } insert(value) { const index = this.arr.length; this.arr[index] = value; // 마지막에 값을 넣어준다. this.#reheapUp(index); } #reHeapDown(index) { const leftIndex = index * 2 + 1; // 왼쪽 Index if (leftIndex < this.arr.length) { // 만약에 왼쪽 인덱스가 총 배열의 길이보다 작은경우 const rightIndex = index * 2 + 2; const bigger = this.arr[leftIndex] > this.arr[rightIndex] ? leftIndex : rightIndex; if (this.arr[index] < this.arr[bigger]) { const temp = this.arr[index]; this.arr[index] = this.arr[bigger]; this.arr[bigger] = temp; this.#reHeapDown(bigger); } } } remove() { // root만 remove if (this.arr.length === 0) { return false; } if (this.arr.length === 1) { // 마지막 하나 남으면 pop해서 리턴해주기 return this.arr.pop(); } const root = this.arr[0]; this.arr[0] = this.arr.pop(); this.#reHeapDown(0); return root; } sort() { // 힙 정렬 const sortedArray = []; while (this.arr.length > 0) { sortedArray.push(this.remove()); } return sortedArray; } search(value) { for (let i = 0; i < this.arr.length; i++) { if (this.arr[i] === value) { return i; } } return null; } // 특정값 수정 update(value, newValue) { const index = this.search(value); if (index === null) { return false; } this.arr[index] = newValue; for (let i = Math.floor(this.arr.length / 2 - 1); i >= 0; i--) { this.#heapify(i); } } // 특정값 삭제 removeValue(value) { const index = this.search(value); if (index === null) { return false; } // 특정값의 index를 splice를 이용하여 없애버린다. this.arr.splice(index, 1); for (let i = Math.floor(this.arr.length / 2 - 1); i >= 0; i--) { // 이렇게 했을때 힙이 깨질 수 있기 떄문에 heapify 해준다 this.#heapify(i); } } transFromMinHeap() { for (let i = Math.floor(this.arr.length / 2 - 1); i >= 0; i--) { // i가 2부터 시작 // 이렇게 했을때 힙이 깨질 수 있기 떄문에 heapify 해준다 this.#minHeapify(i); } return this.arr; } // 특정값을 수정하거나 특정값을 삭제하거나 #heapify(index) { const leftIndex = index * 2 + 1; // 왼쪽 Index const rightIndex = index * 2 + 2; const bigger = (this.arr[leftIndex] || 0) > (this.arr[rightIndex] || 0) ? leftIndex : rightIndex; if (this.arr[index] < this.arr[bigger]) { const temp = this.arr[index]; this.arr[index] = this.arr[bigger]; this.arr[bigger] = temp; this.#heapify(bigger); } } // 특정값을 수정하거나 특정값을 삭제하거나 #minHeapify(index) { const leftIndex = index * 2 + 1; // 왼쪽 Index 78의 왼쪽 5: 23 const rightIndex = index * 2 + 2; // 오른쪽 6: undefined const smaller = (this.arr[leftIndex] || Number.MAX_SAFE_INTEGER) < (this.arr[rightIndex] || Number.MAX_SAFE_INTEGER) ? leftIndex : rightIndex; if (this.arr[index] > this.arr[smaller]) { const temp = this.arr[index]; this.arr[index] = this.arr[smaller]; this.arr[smaller] = temp; this.#minHeapify(smaller); } } } const heap = new MaxHeap(); heap.insert(8); heap.insert(19); heap.insert(23); heap.insert(32); heap.insert(45); heap.insert(56); heap.insert(78); console.log(heap.transFormMinHeap()); // [78, 32, 56, 8, 23, 19, 45] // -> 결과 [8, 23, 19, 32, 78, 56, 45] 질문1) maxheap(minheap) 코드 구현시 heapify 메서드에서 재귀호출 되어야 되지 않는가요?강의에서는 heapify 메서드 구현시 재귀 호출 부분이 빠져있는것 같아서 질문 드립니다. 아니라면 죄송합니다.#heapify(index) { const leftIndex = index * 2 + 1; // 왼쪽 Index const rightIndex = index * 2 + 2; const bigger = (this.arr[leftIndex] || 0) > (this.arr[rightIndex] || 0) ? leftIndex : rightIndex; if (this.arr[index] < this.arr[bigger]) { const temp = this.arr[index]; this.arr[index] = this.arr[bigger]; this.arr[bigger] = temp; // 여기 빠진것 같습니다! this.#heapify(bigger); } }
-
해결됨김영한의 자바 입문 - 코드로 시작하는 자바 첫걸음
다른 project location 설정했을때 프로젝트 찾는 방법
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/)[질문 내용]여기에 질문 내용을 남겨주세요. java-start 파일 선택후 project location 칸에 ~\Java\java-start 로 지정되어 있는데 이대로 하면 다음 에러가 뜹니다Directory 'C:/Users/yeon/Java/java-start' is already taken by the project 'java-start'. Please choose another location선생님과 같이 한 것 같은데 왜 이렇게 뜰까요? 그래서 상위폴더인 Java를 선택했는데 인텔리제이에서 프로젝트를 못 찾겠습니다.수업에서 Java-start > src 누르면 쭉 뜨는데 Main 밖에 안 뜹니다.코드를 어떻게 찾을 수 있나요??
-
미해결비전공자의 전공자 따라잡기 - 데이터베이스,SQL
제 2 정규형 질문
제 2정규형을 보다 보니 질문이 생겼습니다.아이폰 제품에 대한 데이터베이스를 만들 때예를 들어 아래와 같이 9가지 정보만 간단히 표기하고 싶을 때 하나의 테이블에 다 넣는 것이 아니라 <I Phone 제품 테이블>-모델명-용량-출시일-OS 정보-색상-RAM-카메라-칩-시리얼 넘버 이런식으로 해야하는건가요? <I Phone 제품 테이블>-모델명-용량-출시일-OS 정보-색상-RAM-카메라-칩-시리얼 넘버 <모델명 테이블>-모델명-용량-출시일-색상 <RAM 테이블>-RAM 종류 <카메라 테이블>-카메라 종류 <칩 테이블>-칩 종류 <OS 테이블>-OS 종류
-
미해결스프링 프레임워크는 내 손에 [스프1탄]
Lomkob API 관련
혹시 지금은 pom.xml에 lombok 의존성만 추가해도 쓸 수 있는 거 같은데 맞나요?? eGovFrame-4.2.0 버전 입니다.
-
미해결김영한의 실전 자바 - 중급 2편
Set toString 질문
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.
-
미해결따라하며 배우는 리액트 A-Z[19버전 반영]
기능
taliWindcss를 사용해서 클래스네임에 작성을하고 마우스를 가져다 대면 75% 이런식으로 나온다고 하셨는데 아무것도 안나오는데 어떻게 하나요? 이 부분 강사님처럼 모양 바꾸고 싶은데 어떻게 하나요?
-
해결됨파이썬 알고리즘 트레이딩 파트1: 알고리즘 트레이딩을 위한 파이썬 데이터 분석
Quotas 리스트에 아무것도 나오지 않습니다.
계정을 Paid 계정으로 신용카드로 인증하여 업그레이드 하였는데 계정은 Azure 구독1 으로 설정되어있습니다.설정에 들어가서 기본 구독 필터를 확인해보니 Azure 구독1으로 설정 되어있고 변경 할 수 없게 고정 값으로 되어있습니다.감사합니다...
-
해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
세션에 보관하면 안되는 정보
세션 하이재킹이란 게 세션 id가 담긴 쿠키를 탈취하는 것인데, 이때 세션에 민감한 정보가 보관된 상태라면 사용자에게 노출할 가능성이 있어서 보관하면 안되는 것인가요?member_id와 같은 pk 값은 세션에 보관해도 되나요? (현재 레디스 세션을 사용 중입니다)
-
미해결그림으로 쉽게 배우는 네트워크
신호? 데이터?
강의중에 언급하신 아날로그 신호, 디지털 신호, 아날로그 데이터, 디지털 데이터용어가 서로 햇갈려서 글 남겨드립니다. 그리고 제가 재대로 정확하게 알고있는지 궁금하여 글 몇개 남겨드립니다. Q1. 먼저 해당용어가 먼저 나온건 1계층을 설명해주셧을때 나왓는데요 1계층 즉, 물리계층은 이전 계층들에서 계속 쌓여온 헤더와 데이터가 모여서 최종적으로 구성된 "프레임" 이라는 데이터를 물리적인 전기신호로 바꿔서 전송하는 역할로 알고있습니다. 해당 내용이 제가 알고있는 물리계층에 역할이 맞는지 궁금합니다 Q2. 데이터링크와 물리계층 강의에서전기신호, 전자기파, 아날로그 신호에 대해서 설명을 해주셧는데요아날로그 신호란 전기신호, 전자기파 같은 물리적인 신호라고 하였고 물리계층은 디지털신호를 아날로그 신호로 바꾸고 목적지까지 전달한다고 하였습니다. 그럼 여기서 말하는 디지털 신호는 "프레임"을 말하는것이며,아날로그 신호는 "프레임"이라는 데이터를 전기신호로 바꾼 것을 말하는 걸까요? Q3. 랜카드는 물리계층에 역할을 같이 하기도 한다고햇는데랜카드는디지털데이터를 아날로그 데이터로 바꾸기도 하고아날로그 데이터를 디지털데이터로 바꾸기도 한다는데이 행위가 물리계층에과 같은 역할을 하는건가요? 그리고 여기서 말하는 디지털 데이터와 아날로그 데이터들이위에서 언급한 아날로그 신호와 전기신호 인지 궁금합니다 신호와 데이터간에 단어 혼동이 와서 글 남겨드립니다.
-
해결됨(2025) 일주일만에 합격하는 정보처리기사 실기
어디서 들은거 여쭤봐서 죄송합니다.
입출력 관련해서 getch putch 겟챠 풋챠 라는게 있다는데 몰라도 되는 부분일까요?
-
해결됨[취업폭격기] 공공기관 전산직(IT) 취업 준비를 위한 정규과정 (기초~고급)
권한 부탁드립니다.
방금 구글 폼 작성했습니다. 권한 요청 부탁드립니다! 안녕하세요 취업폭격기 제로미니 입니다.정규과정을 신청하신분은 Zeromini-lab 권한, Zeromini Git Hub 취업자료 권한 신청 관련하여디스코드 (제로미니 IT취업 공부방) [초대장] 을 통해 '취업폭격기 제로미니'에게 다이렉트 메시지를 남겨주시면내용을 안내해드리도록하겠습니다!
-
해결됨[취업폭격기] 공공기관 전산직(IT) 취업 준비를 위한 정규과정 (기초~고급)
디스코드 초대 수락 불가
디스코드 방 초대 수락이 안되는데 혹시 제 개인의 문제인지 초대방의 문제인지 판단이 안돼서 문의드립니다. 안녕하세요 취업폭격기 제로미니 입니다.정규과정을 신청하신분은 Zeromini-lab 권한, Zeromini Git Hub 취업자료 권한 신청 관련하여디스코드 (제로미니 IT취업 공부방) [초대장] 을 통해 '취업폭격기 제로미니'에게 다이렉트 메시지를 남겨주시면내용을 안내해드리도록하겠습니다!
-
미해결바닥부터 시작하는 STM32 드론 개발의 모든 것
보드 orcad 회로도 공유는 어려울까요?
모듈보고, 대략적으로 그려지긴하지만.. 직접 아트웍도 해보려고 하는대, 아무래도 제가 초보이고, 처음부터 직접 해보려다보니, 회로도 잘못된걸 보고, 아트웍하게될까 우려가 되서요.. 절대 공유는 하지않겠습니다.. 가능할까요?