묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨38군데 합격 비법, 2025 코딩테스트 필수 알고리즘
코드 피드백 부탁드립니다,
아래의 코드는 강사님의 최종 작성 코드를 확인 전, 제가 생각해서 작성한 코드입니다.def find_max_occurred_alphabet(string):alphabet_occurrence_array = [0] * 26for char in string:if char.isalpha():arr_index = ord(char) - ord('a')alphabet_occurrence_array[arr_index] += 1max_num = alphabet_occurrence_array[0]max_alphabet_index = -1max_occurred_alphabet = 0for number in alphabet_occurrence_array:max_alphabet_index +=1if max_num < number:max_num = numbermax_occurred_alphabet = max_alphabet_index + ord('a')return chr(max_occurred_alphabet) 강사님께서 작성하신 코드와 비교해보니, 확실히 강사님께서 작성하신 코드가 더 심플해보였습니다.1-6 강의를 듣고 확인해보니, 시간복잡도 측면에서는 강사님께서 작성주신 코드와 차이가 없음을 확인하였습니다.제 구현 방식에 대해 앞으로 코드를 작성 시, 어떻게 풀이 방향을 잡고 구현을 해야하는지, 현재 코드에서의 개선점에 대해 피드백 주시면 감사드리겠습니다.
-
해결됨코딩테스트 [ ALL IN ONE ]
[코테 적용] 👉 [3번 문제] 완전탐색 (DFS, BFS) (전반부)
강의 시간 11분에 시간복잡도가 10^3*10^3=10^6이라고 하셨는데요. 한개의 10^3은 num[i].length라는건 이해가 됬는데 나머지 10^3은 어떻게 도출된건가요?
-
해결됨세계 대회 진출자가 알려주는 코딩테스트 A to Z (with Python)
DP 11053관련 질문있습니다.
안녕하세요, DP 백준 11053문제관련해서 질문이 있습니다.1) 부분수열중 가장 긴 거라했으니N = int(input())lit = list(map(int, input().split()))print(len(sorted(list(set(lit)))))이렇게 set으로 중복처리를해주고 그 길이를 구하면 안되는건가요?2) 1) 방법이 틀려 부분수열이 아니라 기존에 input값에서 길이를 구하는걸로 구했을때 하기와 같이 했습니다.N = int(input())lit = list(map(int, input().split()))dp = [0] * (N+1)for i in range(1, N): dp[i-1] = (lit[i] - lit[i-1])print(sum([1 for i in dp if i>0])+1)이전값과 비교하여 양수이면 남기고 남겨진값들로 길이를 구하려했는데 1), 2) 방법에서 둘 다 채점이 틀려서 제가 문제 자체를 이해를 잘못하고 있는지 하여 문의드립니다.
-
해결됨38군데 합격 비법, 2025 코딩테스트 필수 알고리즘
디스코드 접근할 수 없습니다.
1. 현재 학습 진도몇 챕터/몇 강을 수강 중이신가요?어떤 알고리즘을 학습하고 계신가요?여기까지 이해하신 내용은 무엇인가요? 2. 어려움을 겪는 부분어느 부분에서 막히셨나요?코드의 어떤 로직이 이해가 안 되시나요?어떤 개념이 헷갈리시나요? 3. 시도해보신 내용문제 해결을 위해 어떤 시도를 해보셨나요?에러가 발생했다면 어떤 에러인가요?현재 작성하신 코드를 공유해주세요 이렇게 구체적으로 알려주시면, 더 정확하고 도움이 되는 답변을 드릴 수 있습니다! 😊
-
미해결C++로 만들면서 배우는 게임 개발과 알고리즘 with Windows API
오디오쪽 건의사항..
마이크와 오디오 세팅을 개선해주시면 좋을것 같습니다ㅎㅎ( 잡음, 볼륨 등.. )다음에도 재밌는 강의 만들어주세요! 강의 좋습니다!
-
미해결김영한의 실전 자바 - 중급 2편
트리 구조의 구현에서의 노드 객체 필드
=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예[질문 내용]"트리 구조의 구현" 부분에서 Node0의 왼쪽 노드는 자신의 왼쪽 자손 노드, 오른쪽 노드는 자신의 오른쪽 자손 노드라고 할 때 Node 객체의 필드를 구성하는 prev, item, next에서 prev는 left, next는 right로 생각하면 될까요? 해당 교재 내용에서 Node 객체 필드가 prev, item, next라고 되어있어 질문드립니다.
-
미해결김영한의 실전 자바 - 중급 2편
자바 중급 마지막 문제 코드리뷰 및 아이콘 출력 부탁드려요
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.코드리뷰 및 아이콘 출력 부탁드려요안녕하세요. 자바 중급 마지막 문제를 풀어보았는데, 코드가 난잡한거 같습니다.혹시 코드 리뷰나 틀린점을 짚어주시면 감사하겠습니다.또한 아이콘 출력은 어려워서 이름으로 출력하게 했는데 아이콘 출력 나온는 법도 알려주시면 감사하겠습니다.참고로 Suit 클래스는 영한님의 클래스를 재사용 하였습니다.마지막으로 List가 비교적 사용이 쉬워서 List를 통한 풀이를 진행했는데,HashMap이나 다른 컬렉션을 이용한 풀이도 있을까요? package class2_8Iterator.MyArray.cardGame; /** * 카드에 대한 속성을 정의하는 클래스 * 1. 문양을 가진다 * 2. 번호를 가진다 * 3. 소팅이 가능하다 */ import static class2_8Iterator.MyArray.cardGame.Suit.*; public class Card implements Comparable<Card>{ private final Suit suit; private Integer cardNumber; public Card(Suit cardIcon, Integer cardNumber ){ this.cardNumber = cardNumber; this.suit = cardIcon; } /**문양을 비교하기 위해 숫자로 변환한다. * */ public Integer iconConverter(String cardIcon) { if(SPADE.getIcon().equals(cardIcon)) { return 1; } else if(HEART.getIcon().equals(cardIcon)){ return 2; } else if(DIAMOND.getIcon().equals(cardIcon)) { return 3; } else if (CLUB.getIcon().equals(cardIcon)) { return 4; } return 0; } public Suit getSuit() { return suit; } /* @Override public String toString() { return "Card{" + "icon=" + icon + ", cardNumber=" + cardNumber + '}'; } */ @Override public String toString(){ return cardNumber+"("+suit+")"; } /** * 문양을 비교하고 같은 문양이면 숫자가 더 큰게 먼저 앞으로 나온다. * */ @Override public int compareTo(Card card) { Integer thisIcon = iconConverter(this.suit.getIcon()); Integer inputIcon = iconConverter(card.suit.getIcon()); if(this.cardNumber==cardNumber){ return thisIcon<inputIcon ? -1 : (thisIcon==inputIcon ? 0 : 1); } else return this.cardNumber<cardNumber ? -1 : (this.cardNumber==cardNumber ? 0 : 1); } public int numberCompareTo(Card card){ return this.cardNumber<card.cardNumber ? -1 : (this.cardNumber==card.cardNumber ? 0: 1); } public Suit getIcon() { return suit; } public Integer getCardNumber() { return cardNumber; } public void setCardNumber(Integer cardNumber) { this.cardNumber = cardNumber; } }package class2_8Iterator.MyArray.cardGame; public enum Suit { SPADE("♠"), // 스페이드(♠) HEART("♥"),// 하트(♥) DIAMOND("♦"),// 다이아몬드(♦) CLUB("♣");// 클로버(♣) private String icon; Suit(String icon){ this.icon=icon; } public String getIcon() { return icon; } }package class2_8Iterator.MyArray.cardGame; import java.lang.reflect.Array; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.stream.Collectors; import java.util.stream.Stream; import static class2_8Iterator.MyArray.cardGame.Suit.*; /** * 카드를 이용하여 덱을 구성한다. * */ public class Deck { private Card card; private List<Card> masterDeck; private List<Card> spadeDeck = new ArrayList<Card>(); private List<Card> heartDeck = new ArrayList<Card>(); private List<Card> diamondDeck = new ArrayList<Card>(); private List<Card> clubDeck = new ArrayList<Card>(); /*** * */ public Deck(){ for(int i =1 ;i <= 13; i++){ card = new Card(SPADE,i); spadeDeck.add(card); } for(int i =1 ;i <= 13; i++){ card= new Card(HEART,i); heartDeck.add(card); } for(int i =1 ;i <= 13; i++){ card = new Card(CLUB,i); clubDeck.add(card); } for(int i =1 ;i <= 13; i++){ card =new Card(DIAMOND,i); diamondDeck.add(card); } /**배열 합치기 * */ List<Card> mergedDeck1 = Stream.of(clubDeck, diamondDeck) .flatMap(Collection::stream) .collect(Collectors.toList()); List<Card> mergedDeck2 = Stream.of(spadeDeck,heartDeck) .flatMap(Collection::stream) .collect(Collectors.toList()); masterDeck = Stream.of(mergedDeck1, mergedDeck2) .flatMap(Collection::stream) .collect(Collectors.toList()); Collections.shuffle(masterDeck); /*** * 덱 생성 확인을 위한 디버깅 */ // for(Card cardEntry :deck){ // // System.out.println(cardEntry.getCardNumber() + "," + cardEntry.getIcon()); // // } // System.out.println("size ie "+ deck.size()); // System.out.println( masterDeck.getClass()); } public List<Card>getMaterDeck(){ return masterDeck; } }package class2_8Iterator.MyArray.cardGame; import java.util.ArrayList; import java.util.List; /** * DECK에서 카드를 뽑아 패에 넣는다. * */ public class Player { List<Card> hands = new ArrayList<>(); Deck deck = new Deck(); // new 연산자 (메모리에 올리기) 안쓰면 nullPointerException 터진다 Integer [] cardNumberList = new Integer[5]; Integer totalNumber = 0; public void drawCard(int turn){ List<Card> playableDeck = deck.getMaterDeck(); Card inputCard = playableDeck.get(turn); hands.add(inputCard); playableDeck.remove(turn); } public Integer getSumOfCardNumber(){ for(int i = 0 ; i <5;i++){ Card handCard = hands.get(i); cardNumberList[i] = handCard.getCardNumber(); totalNumber = totalNumber+cardNumberList[i]; } return totalNumber; } } package class2_8Iterator.MyArray.cardGame; import java.lang.reflect.MalformedParameterizedTypeException; import java.util.*; public class CardGameMain { public static void main(String args[]) { Player player1 = new Player(); Player player2 = new Player(); Deck deck = new Deck(); // List<Card> playerList1 = new ArrayList<>(); // List<Card> playerList2 = new ArrayList<>(); for (int i = 0; i < 10; i++) { if(i%2!=0){ player2.drawCard(i); } else player1.drawCard(i); } //Player 클래스의 hands에 값을 넣었으나 다른 값을 참조하니까 자꾸 OUTOFINDEX 에러 나옴 //다음 코드는 hands내 값을 디버깅 할때 사용 한다 System.out.println("player1의 카드 리스트 "+Arrays.toString(player1.hands.toArray())); System.out.println("player2의 카드 리스트 "+Arrays.toString(player2.hands.toArray())); /*** TODO * 1.손패 카드를 소팅하고 * 2. 카드 번호의 계를 구한다. */ Arrays.sort(player1.hands.toArray()); Arrays.sort(player2.hands.toArray()); System.out.println("==================정렬후 카드 패=================="); System.out.println("player1의 카드 리스트 "+Arrays.toString(player1.hands.toArray())); System.out.println("player2의 카드 리스트 "+Arrays.toString(player2.hands.toArray())); System.out.println("================== 카드 패 숫자 합계 ============="); System.out.println(player1.getSumOfCardNumber()); System.out.println(player2.getSumOfCardNumber()); if(player1.getSumOfCardNumber()> player2.getSumOfCardNumber()){ System.out.println("플레이어 1이 이겼습니다"); }else { System.out.println("플레이어 2가 이겼습니다"); } } }
-
해결됨SW 역량테스트 합격하기 A형 with C++ (Advanced Algorithm)
BOJ 2234 성곽 문제 코드에서 질문 있습니다.
안녕하세요 선생님 강의 너무 잘보고 있습니다 !다름이 아니라 BOJ 2234번 성곽 60번째 줄에서 질문이 있습니다.open을 판단할때 양쪽 모두 확인하는 이유가 있을까요? 한쪽에서만 확인하면 오류가 생기는 경우가 있는지 궁금합니다.
-
미해결김영한의 실전 자바 - 중급 2편
직접 구현하는 연결 리스트4 - 제네릭 도입 코드 질문
=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)예[질문 내용] package collection.link; public class MyLinkedListV3<E> { private Node<E> first; private int size; public void add(E e){ Node<E> newNode = new Node<>(e); if (first == null){ first = newNode; } else { Node<E> lastNode = getLastNode(); lastNode.next = newNode; } size++; } //추가 코드 public void add(int index, E e){ Node<E> newNode = new Node<>(e); if (index == 0){ newNode.next = first; first = newNode; } else{ Node<E> prev = getNode(index - 1); newNode.next = prev.next; prev.next = newNode; } size++; } @Override public String toString() { return "MyLinkedListV1{" + "first=" + first + ", size=" + size + '}'; } private static class Node<E>{ E item; Node<E> next; public Node(E item) { this.item = item; } //A->B->C이런모양으로 출력하고 싶어! @Override public String toString() { StringBuilder stringBuilder = new StringBuilder(); Node<E> x = this; stringBuilder.append("["); while (x != null) { stringBuilder.append(x.item); if (x.next != null) { stringBuilder.append("->"); } x = x.next; } stringBuilder.append("]"); return stringBuilder.toString(); } } } 위 코드에서 Node는 정적 중첩 클래스로서 MyLinkedListV3에 선언돼 있습니다. static은 바깥 클래스와 독립적이고 클래스레벨에 소속돼 있어 인스턴스에 따라서 static class가 바뀌는 일은 없다고 알고 있었습니다. 그런데 여기서는 바깥 클래스의 타입 매개변수 E가 정적 중첩클래스인 Node에 영향을 주어 Node의 item의 타입을 E로 만듭니다. 그러면 E가 Integer인 MyLinkedListV3, E가 String인 MyLinkedListV3가 있을 수 있다는 것인데 타입 매개변수가 도입된 정적 중첩 클래스는 정적 변수와 다르게 인스턴스에 영향을 받을 가능성이 있다고 생각돼서 다음과 같이 실험해봤습니다.아래 코드를 실행한 결과package collection.link; public class MyLinkedListV3Main { public static void main(String[] args) { MyLinkedListV3<String> stringList = new MyLinkedListV3<>(); MyLinkedListV3<Integer> intList = new MyLinkedListV3<>(); stringList.add("a"); stringList.add("b"); stringList.add("c"); String string = stringList.get(0); System.out.println("string = " + string); System.out.println(stringList); intList.add(1); intList.add(2); intList.add(3); Integer integer = intList.get(0); System.out.println("integer = " + integer); System.out.println(intList + " = " + stringList); } } string = a MyLinkedListV1{first=[a->b->c], size=3} integer = 1 MyLinkedListV1{first=[1->2->3], size=3} = MyLinkedListV1{first=[a->b->c], size=3}이 부분을 유의 깊게 봐주세요 System.out.println(intList + " = " + stringList);위 코드를 실행하면 intList, strList를 동시에 출력해도 잘 출력이 되고 서로 독립적인 클래스가 타입만 다른 상태로 선언된 것처럼 보입니다.의문점이 또 있습니다.MyLinkedListV3<Integer> intList2 = new MyLinkedListV3<>(); //을 main에 추가하고 System.out.println(intList + " = " + stringList + intList2); //위와 같이 intList2도 출력하면 MyLinkedListV1{first=[1->2->3], size=3} = MyLinkedListV1{first=[a->b->c], size=3}MyLinkedListV1{first=null, size=0}위와 같이 타입 매개변수를 inList와 intList2가 같은 Integer인 상황임에도 링크드 리스트안의 요소들을 공유하진 않습니다. 같은 타입 매개변수를 사용하는 인스턴스들 끼리는 같은 정적 중첩 클래스를 공유하는 줄 알았는데 이것도 아닌 것 같습니다. 타입 매개변수가 적용된 정적 중첩 클래스는 정적 변수와 다르게 인스턴스마다 서로 다르게 존재하는지 여쭙고 싶습니다. 마지막 제네릭 타입 안에서 Node<E> node = new Node<>();는 되고 new E();는 안되는 이유를 생각해봤는데 맞게 생각한건지 봐주셨으면 좋겠습니다.E는 단순히 컴파일 되기 전 타입을 선언하여 해당 타입의 안정성을 보장하기 위해 E가 String으로 선언된 상황이면 String전용 Node로 만들기 위해 들어간거고 이 영향은 컴파일단계에서만 미치며 컴파일 이후에는 전부 상한의 클래스로 대체된다. 하지만 상한 클래스로 예를들어 Object라고 대체되어 어떤 메서드의 return 값이 Object로 변하는 경우라도 컴파일러가 알맞게 이전의 E타입으로 다운캐스팅 해주니 문제 없는 것이다.하지만 인스턴스 E를 "생성"하는 것은 문제가 된다. 단순히 타입을 선언하는게 아니고 인스턴스 E를 생성해서 뭔갈 한다면 예를 들어 상한이 Object이고 Object의 이름모를 하위타입의 인스턴스를 생성하면 해당 타입의 메서드, 멤버변수를 전부 활용할 수도 있다는 것인데, E가 정확히 무엇일지 몰라서 컴파일러가 상한 타입으로 퉁친 상태인데, 상한 타입보다 하위의 타입의 인스턴스 메서드를 쓸 가능성은 당연히 없애는 것이 맞기 때문에 new E();도 못쓰는 것이고 E인스턴스의 메서드, 멤버 변수 정보도 당연히 모르니까 instanceOf도 못 쓰는 것이다.라고 결론을 내렸는데 괜찮을까요?
-
미해결2주만에 통과하는 알고리즘 코딩테스트 (2024년)
예제코드 자바입니다
복습하면서 자바로도 풀어봤어요 필요하신분들 확인!!https://github.com/hyukjunkim1116/algorithm-master-in-2weeks
-
미해결비전공자의 전공자 따라잡기 - 자료구조(with JavaScript)
heapify 안의 bigger 삼항연산자 질문
#heapify(index) { // 특정 값 수정, 삭제 const leftIndex = index * 2 + 1; 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[bigger]; this.arr[index] = this.arr[bigger]; this.arr[bigger] = temp; this.#heapify(bigger); } } bigger 삼항연산자에서 this.arr[leftIndex]의 값이 0 이고 this.arr[rightIndex]의 값이 undefined이면 조건이 false가 되면서 bigger에 rightIndex값이 들어가면서 오류가 생기는거 같습니다!
-
미해결코딩테스트 합격자되기-알고리즘 개념
코딩 테스트 대비 자료의 49페이지 Tip에 대한 질문입니다.
데이터 양이 많지 않으나 데이터 간의 간격이 큰 경우에 데이터 값을 인덱스로 사용하면 Memory Exception이 발생한다고 했는데, 이 말은 인덱스로 사용된 값들이 차이가 커서 결국 배열이 쓸데없이 커지므로 제한된 메모리를 초과할 가능성이 많다는 의미인가요??즉, 1, 10000 이란 값이 있을때에 이 값들을 인덱스로 쓰면 10000 요소를 가진 배열로 만들어 지지만, 유효한 값은 단 2개( 1과 10000의 인덱스가 가리키는 요소 )만이 들어있게 되고, 이 값의 차이가 크면 메모리에 담을 수 없을 만큼의 크기로 커진다는 의미이므로 피해야 한다는 말로 이해가 됩니다만..그리고, 구조체를 사용하라는 말의 의미가 값을 하나의 구조체로 해서 연결 리스트로 연관 지으라는 의미로 받아들여도 되나요? 혹시 잘 못 알았다면 어떤 의미인지 설명해 주시면 감사하겠습니다.
-
해결됨카카오 코테 6주 합격! 실전 파이썬 코딩테스트
사전문제 관련 질문
안녕하세요 이제 막 강의 듣기 시작한 취준생 입니다. 사전 문제 관련 수업 진행 방식에 대해서 질문이 있어서 글 남겼어요.섹션1 '이 강의를 극대화 하는법' 에서 사전 문제 먼저 풀고 -> 강의를 들으라고 하셨는데, 섹션2 시작할 때 사전문제 링크에 들어가보니까 1강부터 8강까지 총 8개의 파일이 있더라구요.그래서 궁금한 것이 생겼습니다.'1강_0.배경지식 퀴즈_촬영용' 이거를 혼자 풀어보고 -> 배열 만들기를 들어야 되는 건가요? 아니면 사전 문제에 있는 모든 파일을 풀어보고 강의를 듣는 건가요?? 파일명에 1강, 2강, 3강의 의미는 뭔가요?파일중에 '1강0.배경지식 퀴즈_촬영용' << 이건 뭐죠..? 2강_0.은 문제 -> 답이 구분되어 있어 퀴즈 형식이구나 싶은데 1강.0에 있는건 바로 답이 있어서 무슨 용도인지 모르겠어서요.. 촬영용이라고 적혀있는 것도 그렇고...질문 읽어주셔서 감사합니다.
-
해결됨38군데 합격 비법, 2025 코딩테스트 필수 알고리즘
1-5 알고리즘과 친해지기 (2)
1. 현재 학습 진도현재 1-5 알고리즘과 친해지기 강의 중 가장 많은 알파벳 출력하는 문제를 풀고 있습니다. 2. 어려움을 겪는 부분강사님께서 말씀해주신 부분은 가장 많이 사용된 알파벳을 찾는 함수를 구현하는 것인데 강사님께서 예제로 주신 string 값들이 모두 하나 이상의 최댓값을 가지고 있습니다. print("정답 = i 현재 풀이 값 =", result("hello my name is dingcodingco")) print("정답 = e 현재 풀이 값 =", result("we love algorithm")) print("정답 = b 현재 풀이 값 =", result("best of best youtube"))현재 풀이 값 = o,n,i 현재 풀이 값 = e,l,o현재 풀이 값 = b,e,t 강사님께서는 가장 많이 사용된 알파벳 중 제일 앞에 있는 알파벳을 출력하신 것 같습니다. 제가 1-6강을 아직 들어보지 않아서 이 부분에 대한 설명을 나중에 해주시는지 확인해 보지 않았지만 , 아무 설명도 없이 이렇게만 넘어간다면 저와 같이 헷갈리시는 분들이 많을 것 같아 질문 드립니다 🙂
-
미해결비전공자의 전공자 따라잡기 - 자료구조(with JavaScript)
LinkedList로 스택, 큐 구현하기 숙제
스택 부분class Stack { head=null; tail=null; length=0; push(value) { if (this.head) { this.tail.next = new Node(value); this.tail.next.prev = this.tail; this.tail = this.tail.next; } else { this.head = new Node(value); this.tail = this.head; } this.length++; return this.length; } pop() { let value = this.tail?.value; if (!this.tail) { // 값 존재 x return null; } if (this.tail === this.head) { // 값이 하나 this.head = null; this.tail = null; } else { // 값이 여러개 this.tail = this.tail.prev; this.tail.next = null; } this.length--; return value; } } class Node { next = null; prev = null; constructor(value) { this.value = value; } } const stack = new Stack(); stack.push(1); stack.push(3); stack.push(5); stack.push(2); console.log(stack.push(4)); // length 리턴 5 console.log(stack.pop()); // 4 console.log(stack.pop()); // 2 console.log(stack.pop()); 큐 부분class Queue { head = null; tail = null; length = 0; enqueue(value) { if (this.head) { this.tail.next = new Node(value); this.tail.next.prev = this.tail; this.tail = this.tail.next; } else { this.head = new Node(value); this.tail = this.head; } this.length++; return this.length; } dequeue() { let value; if (!this.head) { return null; } if (this.head === this.tail) { // 한 개 value = this.head.value; this.head = null; this.tail = null; } else { // 여러 개 삭제 value = this.head.value; this.head = this.head.next; this.head.next.prev = null; } this.length--; return value; } } class Node { prev = null; next = null; constructor(value) { this.value = value; } } const queue = new Queue(); queue.enqueue(1); // 1 queue.enqueue(3); // 3 queue.enqueue(5); // 5 queue.enqueue(2); // 2 queue.enqueue(4); // 4 console.log(queue.enqueue(7)); // 7 console.log(queue.dequeue()); // 1 console.log(queue.dequeue()); // 3 console.log(queue.dequeue()); // 5 console.log(queue.dequeue()); // 2 console.log(queue.dequeue()); // console.log(queue.dequeue()); // console.log(queue.dequeue()); // 큐 부분에서 콘솔 로그로 찍어 봤을 때 deque가 1,3,5,2 까지 진행 되고 그 이후에this.head.next.prev = null; ^TypeError: Cannot set properties of null (setting 'prev')이런 에러가 발생하는데 이유가 궁금합니다.
-
미해결카카오 코테 6주 합격! 실전 파이썬 코딩테스트
식 오류 있습니다.
안녕하세요. 강의를 듣고 있는 학생입니다.현재 1분 25초에 나오는 'O(logN)알고리즘을 선택한다면?' 부분의 식에서 7/log_10(2) 이 1/log_10(2)로 수정되어야 할 것 같습니다(log의 밑을 여기엔 수식으로 표현하지 못하여 log_10(10이 밑)처럼 표현했습니다.). 즉 7이 1이 되어야 합니다.감사합니다.
-
해결됨38군데 합격 비법, 2025 코딩테스트 필수 알고리즘
섹션4. 3주차 Stack 백준 2493
1. 현재 학습 진도몇 챕터/몇 강을 수강 중이신가요? 섹션4. 3주차 Stack 3-5어떤 알고리즘을 학습하고 계신가요?여기까지 이해하신 내용은 무엇인가요? 2. 어려움을 겪는 부분딩코님교재 스택부분 예제에 있는 백준 2493 , https://www.acmicpc.net/problem/2493선생님이 알려준 내용대로 이해하고 제출했으나 3개모두 시간초과가 뜹니다. pypy로 바꿔서도 해봣네용스택 학습이 우선적이기에 의도했다고 하더라도(제가 잘못 한걸 수도 있습니다!!!1)시간초과가 뜨지않길 원합니다, 어떻게 코드를 수정해야할까요 3. 시도해보신 내용 에러가 발생했다면 어떤 에러인가요? 시간초과현재 작성하신 코드를 공유해주세요 첫번째콛, -내가 작성n=int(input()) # 한 줄로 입력 받기 data = input().strip() numbers = list(map(int, data.split())) result=[] for i in range(n-1,-1,-1): cur_idx=i for j in range(i-1,-1,-1): if numbers[i]<numbers[j]: result.append(j+1) break elif j==0: result.append(0) result.append(0) while result: print(result.pop(),end=" ") 나머지코드- 딩코님의 작성n=int(input()) # 한 줄로 입력 받기 data = input().strip() top_heights= list(map(int, data.split())) def get_receiver_top_orders(heights): answer = [0] * len(heights) while heights: height = heights.pop() for idx in range(len(heights) - 1, -1, -1): if height <= heights[idx]: answer[len(heights)] = idx + 1 break return answer print(get_receiver_top_orders(top_heights)) # [0, 0, 2, 2, 4] 가 반환되어야 한다! n=int(input()) # 한 줄로 입력 받기 data = input().strip() top_heights= list(map(int, data.split())) def get_receiver_top_orders(heights): answer = [0] * len(heights) while heights: height = heights.pop() for idx in range(len(heights) - 1, -1, -1): if height <= heights[idx]: answer[len(heights)] = idx + 1 break return answer print(get_receiver_top_orders(top_heights)) # [0, 0, 2, 2, 4] 가 반환되어야 한다! 이렇게 구체적으로 알려주시면, 더 정확하고 도움이 되는 답변을 드릴 수 있습니다! 😊
-
해결됨[파이썬/Python] 문과생도 이해하는 DFS 알고리즘! - 입문편
침투/섬개수 질문
침투/섬의개수 질문드립니다. 침투 문제에서는 연속된 숫자가 들어와서 row=input() 이렇게 표현 하셨는데 연속된 숫자가 들어올거라는 것을 어떻게 유추할수 있을까요? 섬의개수 문제에서는 침투와 달리 row=list(map(int,input().split())) 이렇게 표현하셨는데, 침투랑 동일하게 row=input()으로 표현해도 되는거 아닌가요? 연결정보 채우는거에 대한 언급을 어떻게 찾는지 궁금합니다
-
미해결비전공자의 전공자 따라잡기 - 자료구조(with JavaScript)
linkedList prev와 tail 사용 후 o(1) 구현.
class LinkedList { length = 0; head = null; tail = null; add(value) { if (this.head) { this.tail.next = new Node(value); this.tail.next.prev = this.tail; this.tail = this.tail.next; } else { this.head = new Node(value); this.tail = this.head; } this.length++; return this.length; } search(index) { return this.#search(index)[1]?.value; } #search(index) { let count = 0; let prev; let current = this.head; while(count < index) { prev = current; current = current?.next; count++; } return [prev, current]; } remove(index) { const [prev, current] = this.#search(index); if (prev) { prev.next = current.next; this.length--; return this.length; } else if(current){ // index = 0 일 떄 current = current.next; this.length--; return this.length; } if (current.next === null) { // index = tail this.tail = current.prev; current.prev.next = null; this.length--; } // 삭제 대상 없을 때 아무것도 안함. } } class Node { next = null; prev = null; constructor(value) { this.value = value; } } const li = new LinkedList(); li.add(1); li.add(2); li.add(3); li.add(4); li.add(5); console.log(li.add(6)); console.log(li.remove(5)); console.log(li.remove(4)); console.log 찍었을때는 오류 없이 나온거 같은데 잘 구현 했나 궁금합니다!
-
해결됨코딩테스트 [ ALL IN ONE ]
강의자료 만들 때 사용하신 프로그램이 뭘까요?
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 강의하시면서 사용한 강의자료 퀄리티가 너무 좋아서 그러는데 혹시 어떤 프로그램 사용하셔서 만들었는지 알 수 있을까요?