안녕하세요 큰돌님 강의 잘 듣고 있습니다! 다름이 아니라 1-O 부연설명 강의에서 cnt = (cnt * 1) + 1 과 cnt = (cnt % n * 10 % n) + 1 이라고 말씀해주셨는데요!(1:02) 그 다음에 설명해주실 때 (a * b + c) % n 과 (a % n * b + c) % n 과 동일하다고 설명해주시더라구요ㅠㅠ 그래서 살짝 헷갈리는데 결국에는 (a * b + c) % n = (a % n * b + c) % n = (a % n * b + c % n) % n 이거인건가요?
안녕하세요, 강사님. 제 코드가 지저분하긴 하지만 (L, days라는 변수 두개 씀) 이 로직도 맞는 걸까요? 테스트 돌려보면 예시들은 success로 나오긴 합니다. 근데 확신이 안 서서요.. 참고로 저는 t, p 리스트를 인덱스 0부터 시작했습니다. import sys sys.stdin=open("input.txt", "r") def DFS(L, days, income): global answer if L>n: return if days>n: return if days==n: if answer<income: answer=income else: DFS(L+1, days+t[days], income+p[days]) DFS(L+1, days+1, income) n=int(input()) t=list() p=list() for _ in range(n): tt,pp=map(int,input().split()) t.append(tt) p.append(pp) answer=-214700000 DFS(0,0,0) print(answer)
안녕하세요 강사님, 질 좋은 강의 제공해주셔서 감사합니다. 아래 첨부한 제 코드로 진행하면 DFS(L+1, sum+s[L], time+t[L]) 에서 list list index out of range 에러가 뜹니다. 강사님은 아래와 같이 푸셨던데, 제 코드에서 어떠한 점이 에러를 반환했을까요? if L==n: if sum>answer: answer=sum import sys sys.stdin=open("input.txt","r") def DFS(L, sum, time): global answer if time>m: return if L==n and sum>answer: answer=sum else: DFS(L+1, sum+s[L], time+t[L]) DFS(L+1, sum, time) n,m=map(int, input().split()) s=list() t=list() for i in range(n): ss,tt=map(int,input().split()) s.append(ss) t.append(tt) answer=0 DFS(0,0,0) print(answer)
안녕하세요. 오늘부터 큰돌님 강의를 듣게된 수강생입니다. 코딩테스트 공부를 이번엔 잘 준비하고싶은데 여기저기 방황하다가, 큰돌님 강의를 수강하게되었습니다. 큰돌님 강의를 온라인이아닌, 오프라인으로 혹시 들을 수 있는 곳이 있을까요 ? 온라인으로만 강의를 하시는지 여쭤보려고 글 남깁니다! 감사합니다 :)
안녕하세요, 큰돌님 강의 열심히 듣고 있는 수강생입니다. 제 풀이입니다. 사실상 강의 코드와 거의 일치합니다. (다른 점은 올 수 있는 숫자 중 필요 성냥개비 수가 같은 수 중 큰 수를 제거하고 0,1,2,4,6,7,8 에 대해서만 따로 배열을 만들어 돌렸다는 정도입니다) https://www.acmicpc.net/source/79322370 강의 내용을 바탕으로 바텀업 방식과 탑다운 방식으로 모두 풀어보았는데요. 문제 해설에 남겨주신 풀이도 바텀업인 것을 보니 이 문제의 정통 풀이법은 아마 바텀업인 것 같습니다. 탑다운 방식의 풀이가 틀린 것은 아닌데.. 테스트 케이스가 여러 개 주어지는 문제이다보니 성냥개비 개수를 작은 순으로 (4개, 7개, 10개..) 주면 맞는데, 처음 주어지는 성냥개비 개수가 큰 경우(예를 들어 100개부터 주어지는 경우) 에는 100개에 대한 top-down을 돌면서 거쳐온 중간 값들을 dp에 저장하는데 이때 '첫째 자리에는 0이 올 수 없다' 라는 조건을 만족하지 못하는 수가 다수 저장됩니다. 입력으로 주어진 수 x에 대해서는 if (left == x && num == 0) continue; 해당 구문으로 첫째 자리에 0이 오는 것을 방어하는데, 이후 입력으로 받은 수가 dp 테이블에 기록되어있다면 바로 return해버려서 되다 만 중간값을 그냥 반환해버리는 문제가 있는 것 같습니다. 그렇다고 모든 입력에 대해 dp테이블을 전부 비웠다가 다시 탑다운으로 일일이 계산하는 것은 너무나 비효율적같아 보이는데.. 이렇기 때문에 이 문제 풀이는 바텀업이 정배(?)인건가요? 아니면 탑다운 방식에서 제가 뭘 놓치고 있는 것이 있을까요?
public void minus(Product product, Integer minusQuantity) { Integer quantity1 = cartMap.get(product); int newQuantity = quantity1 - minusQuantity; if (newQuantity <= 0) { cartMap.remove(product); } else { cartMap.put(product, newQuantity); } } 정말 기본적인 질문인거같은데 이해가 안돼서 질문드립니다 저 else문을 안쓰고 그냥 put하면 수량은 0이 되는데 키가 지워지지 않더라구요 근데 else문을 사용하니까 키가 사라지는데 무슨 차이일까요 ㅠㅠ remove는 이미 if문에서 실행이 돼야되는거 아닌가요
========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예 [질문 내용] class EraserBox<T> { public boolean instanceCheck(Object param) { return param instanceof T; // 오류 } public void create() { return new T(); // 오류 } } public class MyArrayListV4<E> { private static final int DEFAULT_CAPACITY = 5; private Object[] elementData; private int size = 0; @SuppressWarnings("unchecked") public E get(int index) { return (E) elementData[index]; // 오류 X } 두 예시 모두 런타임 시점에 타입을 활용하는 걸로 보이는데 처음 예시에 있는 두 메서드는 불가능하고 두번째 예시에 있는 get 메서드는 어째서 가능한지 궁금합니다.
안녕하세요 강사님. 수업 잘 듣고 있습니다. 조합에서 nCr = n!/((n-r)!r!) 인 것으로 알고 있습니다. b=[1,3,3,1] 정의하는 설명에서 3C1이 3을 1로 나눈다라고 하셨는데 이 부분의 설명이 이해가 가지 않아서 질문드립니다. 공식에 대입해서 계산해보면3C1일 때 3!/(3-1)!*1!이 결과적으로 3이 되는것이 맞긴 합니다만, 어떻게 하면 앞의 숫자에서 n-1을 곱 하고 i를 나눌 생각을 할 수 있는지 직관적으로 떠오르지가 않아서 질문 드립니다.
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] ```java public void add(Object e, int index) { if (size == elementData.length) { grow(); } for (int i = elementData.length - 1; i > index; i--) { elementData[i] = elementData[i - 1]; } elementData[index] = e; size++; } ``` for문 조건에서 for (int i = elementData.length - 1; i > index; i--) i의 초기값을 배열의 길이로 주는 것보다는 현재 배열에 담고 있는 요소의 수인 (size-1)변수로 주는 것이 루프문의 범위를 줄이고 정말 미세한차이겠지만 조금 더 효율적이라고 생각하는데 혹시 (size-1)변수로 반복문 초기값을 설정했을 때 문제될 점이 있을까요??
안녕하세요 선생님 🙂 이해가 가지 않는 부분이 있어서 질문드립니다. 강의에서도 설명 부분이 없는 것 같아서 질문드립니다. for (int i = 0; i < N; i++) { cin >> str; for (int j = 0; j < str.size(); j++) { if (str[j] < 97) result += str[j]; else if (result.size()) func(); } if (result.size()) func(); } 위의 코드 중 if (result.size()) func(); 이 부분이 왜 다시 들어가야하는지 이해가 가지 않습니다. 설명 부탁드립니다..!!
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 예제를 따라하면서 호기심에 deque.push(1); deque.push(2); deque.push(3); System.out.println("deque.pop() = " + deque.poll()); System.out.println("deque.pop() = " + deque.poll()); System.out.println("deque.pop() = " + deque.poll()); pop을 -> poll로 바꿔봤는데 결과값이 똑같이 나오고 그 반대로 offer / pop 으로 해도 마찬가지더라구요! Deque<Integer> deque = new ArrayDeque<>(); 혹시 이 Deque가 queue / stack 둘 다 지원하기 때문에 데이터를 추가 할 때 자료구조가 결정되는게 맞는건가요?
안녕하세요 선생님 조합을 이용해서 문제 풀이를 시도했는데, 순열 [1,3,9]를 이용 http://boj.kr/2411bc89bcd94ac3baab79fed027f981 순열[-9,-3,-1]을 이용 http://boj.kr/8a0f5a03890c4b1cb210f3ef378f238e 각각 시도를 했는데 1번의 경우는 실패하고 2번의 경우는 성공을 하는데 이유를 모르겠습니다.
stdc++.h를 추가하기 위해서 gcc --version를 통해 경로를 확인하고 해당 경로로 가서 include폴더 안에 bits폴더를 생성해서 stdc++.h파일을 추가하고 a.cpp파일을 만들어서 실행을 했는데 가장 기본 함수인 cin, cout그리고 string자체가 에러가 납니다,,, 환경은 맥 m2 프로이고 vscode로 실행했습니다 추가) #include <iostream>으로 변경했더니 됩니다ㅠㅠ 뭐가 문제일까요? 추가22) 해결했습니다!! iostream은 되길래 iostream파일 경로로 가서 확인했더니 /Applications/ Xcode.app/contents/Developer/~이 경로가 아니고 다른 경로였고 해당 경로에 있던 bits폴더의 stdc++.h에 넣어놨던 내용들이 다 초기화되서 아무것도 없더라구요,,, 그래서 다시 넣어줬더니 잘 실행이됩니다!! 찾아보니까 xcode를 업데이트 하면서 내용들이 날아간것 같더라구욥! 혹시 다른 분들께 도움이 될 수도 있어 해결방법까지 남겨놓겠습니다!
안녕하세요 큰돌님, 언제나 좋은 강의 감사드립니다. http://boj.kr/3ec7adf276a74ad89e779cb5b1839dbd 3-d 불 문제를 풀고있는데 계속해서 메모리 초과가 발생해서요. 혹시 몰라 큰돌님 예제 소스 확인했는데 로직상 거의 유사한것같은데 계속해서 메모리 초과가 발생하고 있습니다. 검토 한 번 부탁드려도 될까요? 다시 한번 좋은 강의 감사드립니다
http://boj.kr/12b19d28de834ea8904e1304c639f49e 안녕하세요 선생님. 해당 코드는 메모리 초과가 나오는데 어느 부분때문에 메모리 초과가 나오는지 이해가 되지 않아서 여쭤봅니다. 또한 제가 처음 이 문제를 보고 어떻게 풀지 감은 잡았는데 그때 제 생각은 bfs가 한 level씩 진행되면 6의 제곱으로 경우의 수가 늘어날텐데 그런 경우에는 60 60 60이 인풋으로 들어왔을때 시간초과가 날 수도 있다고 생각했습니다. 처음 이 문제를 읽고 bfs로 풀 생각을 했을때 시간초과가 나지 않는다는 확신은 무엇인가요??
http://boj.kr/9836321748734ee289405c3434a83f5c 아래 질문 하신분들 코드를 보다가 정리를 해보니 이방법이 외우기 쉬운것 같은데요. 일반적인 DFS, BFS 에서는 오버플로우 체크(방문여부 등등..)를 하는 코드가 있는데요. 위 코드로 할 경우에는 오버플로우 또는 반례를 생각하지 않아도 되는걸까요?