묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
7-H 질문있습니다 :)
안녕하세요 선생님 🙂 한 가지 궁금한 것이 있어서 질문 드립니다 ^^ 입력 값을 int형 변수가 아닌 vector컨테이너를 사용하면 문제가 생기는 경우가 있는데요, 무엇때문에 발생하는 문제인지 모르겠습니다. 아래는 정답의 수도코드입니다.dp[0] = 1; for (int i = 0; i < n; i++) { cin >> temp; for (int j = temp; j <= k; j++) { dp[j] += dp[j - temp]; } }여기서 안쪽 for문 중 j = 1로 변경하면, 연산 자체는 늘어나겠지만 정답인 것은 변함이 없습니다. 아래는 temp변수를 vector 컨테이너로 변경한 코드입니다.vector<int> vec(n); dp[0] = 1; for (int i = 0; i < n; i++) { cin >> vec[i]; for (int j = vec[i]; j <= k; j++) { dp[j] += dp[j - vec[i]]; } }temp 변수를 이용한 것보다 vector 컨테이너를 사용하기 때문에 공간복잡도와 시간복잡도 측면에서 손해를 보지만, 결과는 같습니다.하지만, 안쪽 for문의 j를 j = 1로 수정하면 오답이 됩니다. 테스트케이스에서도 출력 값이 다르게 나오더라구요. 이유가 무엇인지 알려주시면 감사하겠습니다 :) http://boj.kr/0cbbe29b33424769a1e8006da134bd7b
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
3 - G 질문있습니다.
강의의 코드 중 25번째 줄 까지는 이해를 했습니다. 그러나 26 - 28번째 줄의 부분에서 이해가 안가는 것이 있습니다.문제는 최단거리를 바라고 있습니다.그렇다면 26번째 줄, else if (visited[next] == visited[now] + 1)에서 visited[next]는 next에 도달한 가장 적은 걸음 수를 뜻합니다.여기서 제가 이해가 안되는것은 visited[next]가 어떻게 가장 적은 걸음수가 보장 되는지 입니다.visited[now] + 1이 visited[next]보다 작아서 새로운 경로가 더 빠를 수 있는 경우의 수는 신경을 안써도 되는 이유가 무엇인지 궁금합니다.BFS를 사용하면, 가장 먼저 도착한 케이스가 가장 빠른 케이스다 라는 경험과 느낌은 있지만, 이번에는 가중치가 동일하지 않은 상황에서, 특히 뒤로도 갈 수 있는 상황에서 이렇게 생각하고 넘어가기에는 찝찝함이 있어 질문해봅니다.
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
6-D vector 초기화 질문있습니다 :)
안녕하세요 선생님 🙂 테스트케이스가 여러 개인 문제기 때문에 vector를 clear해줬는데요, out of range error가 발생해서 질문 드립니다. 아래 코드의 주석을 살리면 위 에러가 발생합니다. 조언 부탁 드립니다 🙂 http://boj.kr/f9dc05bf7b6e4897a286d9746368c283
-
해결됨김영한의 실전 자바 - 중급 2편
문제와 풀이2 질문이요. (분리-고치는 방법에대해서)
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요. 문제와 풀이2 번째 ShoppingCart 클래스를 만들면서 어떻게 해야 이 습관이 고쳐질까? 라는 생각에 질문을 드립니다.영한님의 ShoppingCart 클래스, displayItems()메서드를 보면, 전체가격합을 구할때 따로 메서드를 만들어서(calculateTotalPrice) 하시는 것을 볼수가 있었습니다.근데 저가 코드를 하는 것을 보면 displayItems()메서드 안에서 계속 합을 구하더라고요.public void displayItems() { int itemsTotal = 0; for (Item item : items) { System.out.println("상뭄명: " + item.getName() + ", 합계: " + item.getTotalPrice()); itemsTotal += item.getTotalPrice(); } System.out.println("전체 가격 합: " + itemsTotal); }이런식으로요.이것을 고치는 방법이 있을까요?답변 부탁 드립니다.
-
미해결김영한의 실전 자바 - 중급 2편
중급 4. LinkedList 궁금한점 있어요
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. 컬렉션 프레임 워크 - LinkedList MyLinkedListV1 에서이해 못하는 소스가 있어서 질문 드려요.아래 코드에서 x.item을 oldValue에 대입하고 반환하는지궁금합니다.그냥 x.item = element만 사용해도 되는거 아닌지? public Object set(int index, Object element) { Node x = getNode(index); Object oldValue = x.item; x.item = element; return oldValue; }
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
7-M 시간초과 질문입니다.
http://boj.kr/77d12fe723574ecc9f5d7a3804c0d7ea 안녕하세요!선생님과 비슷한 방법으로 푼거같은데 어디가 문제인지 잘 모르겠습니다 ㅠㅠ
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
6-H 맵 관련 질문있습니다 :)
안녕하세요 선생님 🙂 시간복잡도가 굉장히 타이트해서 이분탐색으로 푸는 문제인 것은 알고 있으나, 테스트 겸 map으로 다시 풀어보다가 이해가 되지 않는 부분이 있어서 질문드립니다. 30번째 줄의 mp[vecA[i]]++; 이 부분때문에 틀리는건데요, mp[vecA[i]] = 1;이라고 하면 맞더라구요. 둘이 연산 차이가 없어보이고, 테스트케이스도 정상적으로 출력이 되는데요, 제가 놓치고 있는 부분이 있을까요? http://boj.kr/076e9301948a40c9afb2262e5e4c26c0
-
미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
최신화하기
#include <iostream> #include <ctime> using namespace std; struct TM { int tm_year; }; int main() { time_t timer = time(NULL); struct tm* t = localtime(&timer); int yeardb, year = t->tm_year + 1900, age; char Id[20]; cin >> Id; // 주민번호 입력 // 성별 계산 if (Id[7] == '1' || Id[7] == '2') { yeardb = 1900 + ((Id[0]-48) * 10 + (Id[1]-48)); // 특정 문자열의 문자숫자를 숫자로 변환하기 위해서는 '0' 문자0의 아스키 십진수인 48을 뺀다. } else { yeardb = 2000 + ((Id[0]-48) * 10 + (Id[1]-48)); } age = year - yeardb + 1; printf("%d ", age); if (Id[7] == '1' || Id[7] == '3') printf("M\n"); else printf("W\n"); return 0; }24년 기준 53세
-
해결됨세계 대회 진출자가 알려주는 코딩테스트 A to Z (with Python)
시간 복잡도 O(n)과 O(c)의 차이
안녕하세요, 잘 듣고 있습니다! 0.준비 운동에서의 자료구조 정리 - python 강의 부분의 노션을 보니, 해시테이블의 경우 시간 복잡도가 O(c)로 적혀있던데, O(n)과의 차이가 무엇인가요? O(c)를 구글링 해보았는데 나오지 않아 질문드립니다.
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
5-F 재질문드립니다 :)
안녕하세요 선생님 🙂해당 문제 재질문드립니다. 이 글은 아래의 순서로 이루어져있습니다.문제를 풀이한 내용이해되지 않는 부분 설명궁금한 부분이 무엇인지 3 2 1 65 5 23 2 99 10 2위의 예시는 문제의 2번 테스트케이스인데요, 풀이를 해보면 아래와 같습니다. 무게가 2인 가방에 알맞는 1과 2의 무게를 가지고 있는 요소들의 가치를 pq에 넣어 내림차순 정렬하면 99, 65 순으로 가치가 저장되어, 반복문 안에서 result값에 99를 더하고 빼면 65가 남아있다.이미 pq에 65가 저장되어있고, 99는 사용되었기 때문에 무게가 10인 가방에 알맞는 크기인 5의 무게를 가지고 있는 요소의 가치인 23을 pq에 저장하여 내림차순하면 65, 23 순으로 정렬되어있고, 1번을 반복하면 result에 65를 더하고 pq에 23이 남아있는채로 마무리된다. 위와 같이 이해했습니다. 정확히 이해한거 같은데요, 이해가 되지 않는 조건이 하나 있습니다. // 한유태 코드 for (; j < N; j++) { if (C[i] >= vec[j].first) pq.push(vec[j].second); }// 선생님 코드 for (; j < N && C[i] >= vec[j].first; j++) { pq.push(vec[j].second); } 디버깅을 해보니, 제 코드는 vec[j].first가 테스트케이스의 1, 2, 5가 나왔구요, 선생님 코드는 1과 5가 나왔습니다. j++이라는 후위증감연산자에 초점을 맞춰서 분석을 해봤는데요, 저는 이거때문에 문제가 생겼다면 1을 제외한 2와 5가 나와야 한다고 생각합니다. 질문은 아래와 같습니다. 어떻게 해서 2가 스킵된 것인지 궁금합니다.조건문을 for문에 넣지 않고 if문 안에 넣게 되면 어떤 문제가 생기는지 궁금합니다. 테스트케이스는 정답처리가 되어서 오히려 더 헷갈립니다. http://boj.kr/b7ff0aa67f734625837cddfcf08e7abe
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
3-D 질문있습니다.
강의 듣고 나름 반례도 다 처리했다고 생각했는데 2%에서 넘어갈수가 없군요... 제가 어디서 정신줄을 놓았는지 모르겠습니다... 부탁드립니다... http://boj.kr/777d2db6af894cf2a9c3599f9638e7fd
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
2-l 질문있습니다.
문제를 풀어보았는데비주얼스튜디오에서는 통과가 되는데 백준에서는 런타임에러가 발생했습니다. 이유를 알고싶습니다.http://boj.kr/e5488fc5d35b4753bd9850e582e2a043
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
1-D 왜틀
어떤 테스트 케이스를 해도 맞는경우라고 생각되는데백준에 제출하면 왜 틀리다고 하는건지 모르겠습니다.로직은, 처음 인덱스와 마지막인덱스를 비교하며 하나씩 옮겨가는 로직입니다. 홀수와 짝수일때를 감안해서 배열사이즈/2 만큼 반복합니다. http://boj.kr/2be06b65af13421eac006e0e31828864
-
해결됨김영한의 실전 자바 - 중급 2편
강사님 질문이요. 평균적으로 하루에 얼마나 강의에 시간을 투자하시나요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]말 그대로 입니다. 영한님은 하루에 자바 강의를 찍을 때 평균적으로 하루에 시간을 얼마나 투자하시나요?('어레이 리스트 에서 링크드리스트로 변환 할때 이런 것은 얼마나 생각을 해야지 나오지?(11:30~40)'라는 생각이 들어서 질문을 합니다.)
-
해결됨세계 대회 진출자가 알려주는 코딩테스트 A to Z (with Python)
DP (BOJ 12865) 풀이에 관한 질문
import sys input = sys.stdin.readline n, k = tuple(map(int, input().split())) dp = [0 for _ in range(k+1)] minVal = sys.maxsize for _ in range(n): w, v = tuple(map(int, input().split())) dp[w] = v if w < minVal: minVal = w for i in range(minVal+1, k+1): maxVal = -1 for j in range(minVal, i): maxVal = max(maxVal, dp[j] + dp[i-j], dp[i]) dp[i] = maxVal print(dp[m])안녕하세요 강사님! 우선, 이 강의가 저한테 정말 도움이 되고 있음에 감사드립니다! 저는 위와 같이 dp 테이블을 2차원으로 할 생각을 못하고 풀었다가 시간초과가 났습니다. 아직 dp가 어렵게 느껴져서 dp 테이블 설계를 잘 못하겠네요..ㅠㅠ다행히 강의에서 dp 문제는 올려주신 강의만 제대로 숙지하면 될 것 같다고 하셨는데 dp 문제를 잘 풀기 위한 다른 팁 같은게 있을까요?
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
플루이드워셜 k i j 순서가 궁금합니다.
큰돌님 안녕하세요? 플루이드 워셜 푸는데 k i j 순서가 의미가 있나 궁금해서 질문 드리게 되었습니다. 저의 생각은 "모든쌍에 대해 계산하므로 k i j 의 순서는 별로 상관 없다" 입니다.그래서 코드를 이렇게 했더니 틀리더라구요? for(int k = 1;k<=n; k++) { for(int i = 1 ; i<=n;i++) { for(int j = 1 ; j<=n;j++) { if(dist[k][i]==1 && dist[i][j] ==1) dist[k][j]=1; else if(dist[k][i]== -1 && dist[i][j] == -1) dist[k][j]=-1; } } } 왜 큰돌님 해설 처럼 해야 하는지, 그리고 이 해설의 i k j? 순서로 해야하는지, 왜 그런지 차이가 궁금합니다.for(int k=1; k<=n; k++) for(int i=1; i<= n; i++) for(int j=1; j<= n; j++){ if(dist[i][k] == 1 && dist[k][j] == 1) dist[i][j] = 1; else if(dist[i][k] == -1 && dist[k][j] == -1) dist[i][j] = -1; }
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
8-A 질문있습니다
solve()함수가 이해가 가지 않습니다.이미 dp[경찰차 1의 위치][경찰차 2의 위치] = 최소값 으로 getSum()을 통해서 dp값을 구했는데 그럼사건의 시작인 2부터 시작해서 w+1까지 dp의 값을 비교해서 어떤 경찰차가 이동하는지만 구하면 되는데 왜 dp[i][b] + d(a, i) < dp[a][i] + d(b, i) 로 다시 d()함수로 경찰차와 사건의 위치를 다시 계산해서 또 더해서 비교하나요?
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
1-N 곱셈 코드 질문
http://boj.kr/8e0930f84de9404b8ff18b5733c4b88a큰돌님 제가 작성한 코드인데 계속 틀리는데이유가 나눠줘도 결국 수가 너무 커서 long long 범위를 넘어서서 그런 걸까요아니면 로직 자체가 틀린 걸까요 ..?
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
재귀 풀이 질문이 있습니다 선생님
Combi함수의 매개변수로 vector<int> & v가 있는데 v앞에 &기호를 붙이는 이유를 잘 모르겠습니다.
-
미해결김영한의 실전 자바 - 중급 2편
직접 구현하는 배열 리스트1- 시작의 MyArrayListV1 구현 질문이요
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]직접 구현하는 배열 리스트1- 시작의 MyArrayListV1 구현문제를 예외 처리하고 싶은데 아무리 해도 안돼는데 해결책좀 try { list.add("f"); System.out.println(list); } catch (ArrayIndexOutOfBoundsException e) { System.out.println("배열의 범위를 벗어났습니다"); System.out.println("예외 발생 위치: " + e.getMessage()); e.printStackTrace(System.out); }그리고 아래 MyArrayListV1에 이렇게 작성하면 되긴 돼는데 저는 유지보수를 위해서 try~catch를 하고 싶거든요. 그래서이렇게 질문 남겨요public void add(Object e) { if (size >= elementData.length) { // 배열이 가득 찼는지 체크 throw new ArrayIndexOutOfBoundsException("용량을 초과했습니다. 현재 크기: " + size + ", 최대 용량: " + elementData.length); } elementData[size] = e; size++; }