묻고 답해요
143만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨코딩테스트 [ ALL IN ONE ]
강의가 계속 검정화면만 나와요
강의가 검정화면으로만 나오고 소리만 나옵니다
-
해결됨김영한의 실전 자바 - 중급 2편
Comparator질문입니다
public class SortMain2 { public static void main(String[] args) { Integer[] arr = {3,2,1}; System.out.println(Arrays.toString(arr)); System.out.println("Comparator 비교"); Arrays.sort(arr,new AscComparator()); System.out.println("AscComparator:"+Arrays.toString(arr)); } } public class AscComparator implements Comparator<Integer> { @Override public int compare(Integer o1, Integer o2) { if(o1 > o2){ return 1; } else if (o1 == o2) { return 0; }else return -1; } }SortMain2함수에서 Arrays.sort(arr,new AscComparator()); 부분에서 new AscComapator()로 객체만 생성했는데 어떻게 compare함수까지 호출되서 비교를 할수있는거죠?이해가안갑니다...함수 호출을안해는데..
-
해결됨세계 대회 진출자가 알려주는 코딩테스트 A to Z (with Python)
제 학습방법이 맞는지 궁금합니다..
만약 강의보기전에 알고리즘 문제 풀 때, 아무것도 쓰지 못할 경우에는일단 어떻게 접근할지 생각해본다 (한 자라도 쓸 수 없더라도) 강의를 본다. 모르는 개념이 나왔을때, 따로 공부하고 코드를 계속 외울때까지 써본다.이런 방식으로 해도 괜찮을까요??
-
해결됨코딩테스트 [ ALL IN ONE ]
노션 링크 신청했습니다!
금일 오전에 노션 링크 신청했습니다!확인 부탁드려요!
-
해결됨2주만에 통과하는 알고리즘 코딩테스트 (2024년)
재귀와 완전탐색의 차이에 관한 질문이 있습니다!
문제를 풀때, 재귀함수를 사용하여 백트래킹 하는 방법이 있고 완전 탐색 for 문을 돌리는 방법 두가지가 있다고 했을때, 어느것을 사용하든지 관계 없나요? 본질적으로 모든 경우의 수 탐색하는 건 똑같은데 그 방법의 차이일 뿐인가요?? 만약 그렇다면 for 문으로 일일이 코딩하기 어려운 문제들을 재귀로 푼다고 생각하면 될까요?
-
해결됨세계 대회 진출자가 알려주는 코딩테스트 A to Z (with Python)
BOJ 10870 문제 질문드립니다.
섹션 2의 재귀함수 이해하기 파트에서 풀이 1에서n을 입력하는 것과 0,1의 값을 정해주는 것 그리고 for문의 형식까지는 이해했습니다.하지만 arr = [-1] * (n + 2)가 주석을 봐도 어떤 것을 의미하는지 잘 모르겠습니다
-
미해결비전공자의 전공자 따라잡기 - 자료구조(with JavaScript)
숙제 : LinkedList로 Stack, Queue 구현하기
queue : enqueue, dequeue, peekclass Node { prev = null; next = null; constructor(value) { this.value = value; } } class Queue { length = 0; head = null; tail = null; enqueue(value) { // stack.push와 동일 const newNode = new Node(value); if (this.length == 0) { this.head = newNode; this.tail = newNode; } else { newNode.prev = this.tail; this.tail.next = newNode; this.tail = newNode; } this.length++; return this.length; } dequeue() { let rslt; // head.next의 prev를 null로 설정 & head 업데이트 if (this.length > 0) { if (this.length == 1) { rslt = this.head.value; this.head = null; this.tail = null; } else { rslt = this.head.value; this.head.next.prev = null; this.head = this.head.next; } this.length--; } return rslt; } peek() { return this.head?.value; } get length() { return this.length; } } const queue = new Queue(); queue.enqueue(1); queue.enqueue(3); queue.enqueue(5); queue.enqueue(4); queue.enqueue(2); console.log(queue.length); // 5 console.log(queue.dequeue()); // 1 console.log(queue.length); // 4 console.log(queue.peek()); // 3 console.log(queue.dequeue()); // 3 console.log(queue.peek()); // 5 console.log(queue.dequeue()); // 5 console.log(queue.peek()); // 4 console.log(queue.dequeue()); // 4 console.log(queue.dequeue()); // 2 console.log(queue.length); // 0 console.log(queue.dequeue()); // undefined console.log(queue.peek()); // undefined stack : push, pop, topclass Node { prev = null; next = null; constructor(value) { this.value = value; } } class Stack { length = 0; head = null; tail = null; push(value) { // 비어있으면 head = tail = newNode // 그 외엔 tail에다 추가 후 tail 업데이트 const newNode = new Node(value); if (this.length == 0) { this.head = newNode; this.tail = newNode; } else { newNode.prev = this.tail; this.tail.next = newNode; this.tail = newNode; } this.length++; return this.length; } pop() { // tail.prev를 tail로 업데이트 // 비어있거나 하나만 있으면 undefined 반환 let rslt = this.tail?.value; this.tail = !this.tail ? null : this.tail.prev; this.length = this.length - 1 < 0 ? 0 : this.length - 1; return rslt; } top() { return this.tail?.value; } get length() { return this.length; } } const stack = new Stack(); stack.push(1); stack.push(3); stack.push(5); stack.push(4); stack.push(2); console.log(stack.length); // 5 console.log(stack.pop()); // 2 console.log(stack.length); // 4 console.log(stack.top()); // 4 console.log(stack.pop()); // 4 console.log(stack.top()); // 5 console.log(stack.pop()); // 5 console.log(stack.top()); // 3 console.log(stack.pop()); // 3 console.log(stack.pop()); // 1 console.log(stack.length); // 0 console.log(stack.pop()); // undefined console.log(stack.top()); // undefined
-
해결됨2주만에 통과하는 알고리즘 코딩테스트 (2024년)
완전탐색 숫자야구 뭐가 틀린지 모르겠어요..
n = int(input()) hint = [list(map(int,input().split())) for _ in range(n)] answer = 0 #100 ~ 999 for a in range(1,10): # 100의 자리 for b in range(10): # 10의 자리 for c in range(10): # 1의 자리 if (a == b or b == c or c == a): continue cnt = 0 for arr in hint: number = list(map(int, str(arr[0]))) strike = arr[1] ball = arr[2] ball_count = 0 strike_count = 0 #스트라이크카운트 자리수,숫자 둘다 if number[0] == a: strike_count += 1 if number[1] == b: strike_count += 1 if number[2] == c: strike_count += 1 #볼카운트 자리수는 안맞고 숫자만 if a in number and number[0] != a: ball_count += 1 if b in number and number[1] != b: ball_count += 1 if c in number and number[2] != c: ball_count += 1 if ball == ball_count and strike == strike_count: cnt += 1 if cnt == n: answer += 1 print(answer)
-
미해결김영한의 실전 자바 - 중급 2편
제가 작성한 코드 출력 결과에 의문이 있습니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]< 사전 설명 >Rectangle 객체에서 hashCode()와 equals() 둘중 equals()만 오버라이드 하였습니다. 이후 public class RectangleTest { public static void main(String[] args) { Set<Rectangle> rectangleSet = new HashSet<>(); for (int i = 0; i < 13; i++) { rectangleSet.add(new Rectangle(20, 20)); } System.out.println(rectangleSet.size()); for (Rectangle rectangle : rectangleSet) { System.out.println("rectangle = " + rectangle); } } }위와 같은 코드를 작성했을때System.out.println(rectangleSet.size()); 출력 결과가 13이 나오고for문의 출력 결과도 같은 결과가 13번 나옵니다. < 질문 >hashCode()를 오버라이드 하지 않음으로써 해시인덱스가 랜덤으로 배정되는 것으로 알고있습니다.그래서 논리적으로 같은 객체가 들어오더라도 다른 해시인덱스에 할당 되는것이 문제가 됩니다. 하지만 제가 작성한 코드와 같이 많은 for문을 돌게 될면 새로 만들어진 Rectangle 객체가 언젠가 최소 한번쯤은 해시인덱스에서 중복된 객체를 만나게되고, 중복되는 해시 인덱스의 버킷에서 equals() 메서드가 실행되어 저장이 취소될것이라고 예상했습니다.그래서 rectangleSet.size()는 13 미만이 될거라 생각했지만 아니었습니다. 오버라이드된 equals() 메서드가 실행되지 않는 이유가 무엇일까요?
-
미해결김영한의 실전 자바 - 중급 2편
comparable, comparator
얼핏 봤을때에는 comparable 과 comparator 차이가 크게 없어 보이는데, 만약 String ID 알파벳 순이라 아니라String Id 의 length 순으로 정렬해서 배열을 만들고 싶다고 했을때에는 comparable 은 기본적인 자연적인 배열 순서로 정의를 해주기 때문에 comparator 를 쓰는게 올바른 것인가요 ?
-
미해결김영한의 실전 자바 - 중급 2편
comparable, comparator
강의를 보면 ID 를 통한 Array 배열을 정렬할때IdComparator 를 만드셨는데, 사실 comparable 에서도 충분히 정의할 수 있는 것 아닌가요 ?단순히 Comparator 를 통해서도 할 수 있다라는 것을 보여주기 위함인가요 ?또한 언제 comparable 을 쓰는 게 낫고 언제 comparator 를 쓰는게 나은가요 ?
-
해결됨세계 대회 진출자가 알려주는 코딩테스트 A to Z (with Python)
안녕하세요. 파트 소개 글을 보다가 브루트 포스와 구현 문제에 대해
참고로, 단순 구현 문제와 브루트 포스 관련 문제만 잘 풀어도 어렵지 않은 코딩테스트는 합격을 노려볼만합니다. 해당 내용이 언급 되어 있던데, 이부분은제 코테 전략은 아래와 같습니다.백준 브루트포스 알고리즘별 문제모음https://www.acmicpc.net/problemset?sort=ac_desc&algo=125 백준 시물레이션(구현) 알고리즘별 문제모음https://www.acmicpc.net/problemset?sort=ac_desc&algo=141 알고리즘별 문제 모음으로브루트 포스 : 100문제시물레이션 : 100문제각각 100문제 정도 풀어보고해당 강의에 있는 문제들을 완전 이해와 학습 복습을 하는것인데 이정도면 스타트업 코딩테스트 정도 노려볼만한가요?
-
미해결그림으로 쉽게 배우는 자료구조와 알고리즘 (기본편)
동적 프로그래밍 메모리 낭비 질문
안녕하세요!동적 프로그래밍 방식을 사용하면 for 문 안에 table[i] = table[i-1] + table[i-2] 를 볼 수 있었습니다. int[] dp = new int[n + 1];이런식으로 객체를 계속 만들어서 이에 대한 메모리 낭비(?) 는같은 계산이 반복되어서 발생하는 낭비보다 훨씬 덜 한 것인가요 ? 또한 메모리제이션이랑 동적프로그래밍 알고리즘을 구현하는 것은 시간 복잡도를 줄이기 위함인가요? 아니면 메모리 낭비를 방지하기 위함인가요 ? 아니면 시간복잡도가 곧 메모리 낭비와 상당히 관련이 있기에 둘다 신경써준다고 봐야하나요 ?
-
미해결김영한의 실전 자바 - 중급 2편
강의 질문
안녕하세요. 김영한 선생님 모든 강의중에서 재귀함수에 대해서 다뤄주시는 곳이 있을까요 ?
-
미해결김영한의 실전 자바 - 중급 2편
hashCode 결과로 음수가 나올 수 있게 해놓은 이유?
=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]강의 내용에서 hashCode 결과로 음수 값이 나올 수 있으므로 절대값으로 변환하는 과정을 가졌는데요, 자바에서는 왜 음수 값이 나올 수 있게 해놓은 건가요? 인덱스로 사용하는 용도 외에 다른 용도가 있나요?
-
해결됨코딩테스트 [ ALL IN ONE ]
노션 링크 공유를 못 받았습니다
vvoohhee@gmail.com위의 메일 주소로 2번이나 신청했는데 노션을 공유 받지 못했습니다. 노션에 로그인 되어있는 이메일도 위의 이메일과 같은데 한 번 확인 부탁드립니다...
-
해결됨[자바/Java] 문과생도 이해하는 DFS 알고리즘! - 입문편
백준 24479 문제 제출 결과 "틀렸습니다" 라고만 나와서 어떤 부분이 틀렸는지 잘 모르겠어요 피드백 부탁드립니다
package com.study.book.graph; import java.util.*; import java.io.*; public class Baekjoon24479 { private static ArrayList<Integer>[] adjList; private static boolean[] visited; private static int[] answer; private static int visitOrder; public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); StringTokenizer st = new StringTokenizer(br.readLine()); int N = Integer.parseInt(st.nextToken()); int M = Integer.parseInt(st.nextToken()); int R = Integer.parseInt(st.nextToken()); adjList = new ArrayList[N + 1]; for (int i = 0; i < adjList.length; i++) { adjList[i] = new ArrayList<>(); } for (int i = 1; i < N + 1; i++) { st = new StringTokenizer(br.readLine()); int x = Integer.parseInt(st.nextToken()); int y = Integer.parseInt(st.nextToken()); adjList[x].add(y); adjList[y].add(x); } for (ArrayList<Integer> list : adjList) { Collections.sort(list); } visited = new boolean[N + 1]; answer = new int[N + 1]; visitOrder = R; dfs(R); for (int i = 1; i <= N; i++) { bw.write(String.valueOf(answer[i])); bw.newLine(); } br.close(); bw.close(); } private static void dfs(int now) { visited[now] = true; answer[now] = visitOrder; visitOrder++; for (int next : adjList[now]) { if (!visited[next]) { dfs(next); } } } } 안녕하세요 개취님!알고리즘 강의 잘 듣고 있습니다 ㅎㅎ다름이 아니라, 위 코드로 문제를 풀고 테스트 코드 또한 정상적으로 통과하여 백준에서 제출을 진행했는데, 단순히 "틀렸습니다" 라고만 나와서 어떤 점에서 문제가 있는지 정상적으로 파악이 안되서 문의드립니다!한번 확인 후 피드백 주시면 감사하겠습니다.
-
미해결김영한의 실전 자바 - 중급 2편
배열 링크드리스트
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.안녕하세요.자바 HashSet 구현을 할때 이렇게 링크드 리스트를 이용하여 배열을 만들었는데, 질문이 있습니다. ArrayList 와 LinkedList 중 LikedList 를 사용한 이유는 O(x) 가 더 빠르기 때문인가요 ? 어떠한 장점이 있길래 LinkedList 를 결정한건지 모르겠습니다.제가 추측하기로는 buckets 내의 각각의 인덱스에 링크드 리스트가 필요하기 때문에 배열 타입을 링크드 리스트로 결정한 것인가요 ?
-
미해결김영한의 실전 자바 - 중급 2편
HashSet 최적화
우리가 ArrayList 에서 LinkedList로 넘어온 이유가배열 메모리 확보로 인한 낭비로 인해 경우에 따라서 LinkedList 를 사용해야한다고 알고 있는데, set 에서도 ArrayList 처럼 배열 메모리를 확보해두고 배열의 크기를 2배씩 늘리는 식으로 작동하나요 ?
-
해결됨세계 대회 진출자가 알려주는 코딩테스트 A to Z (with Python)
초기값 초기화 없이 구현 하는 방법 후에 Top-Down 방식
원래 Top-Down 방식까지 설명하고 알아두면 좋은 내용들로 넘어갔는데Top-Down는 재귀에 익숙하지 않거나 초보자가 하기 어려워서 넘어 가진 건지 궁금해서요!