묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결김영한의 실전 자바 - 중급 2편
ArrayList와 LinkedList 질문 있습니다.
ArrayList는 배열을 기반으로 만든 List이며LinkedList는 객체의 참조로 연결된 List로 이해했습니다. 요즘에는 메모리 용량이 많이 크기 때문에 고려하지 않아도 된다고 생각하는데 궁금증이 있어 질문을 남깁니다. LinkedList는 데이터가 추가 될 때 마다 새로운 Node를 만들어서 현재 가지고 있는 데이터의 크기만큼 메모리를 차지하는 반면ArrayList는 들어있는 데이터 크기가 일정 크기를 넘는 경우 더 많은 데이터를 저장할 수 있는 새로운 Array를 생성하여 반환하기 때문에 동일한 개수의 데이터를 저장해도 ArrayList가 메모리 상에서 차지하는 크기가 크다고 생각하면 되나요?
-
해결됨[자바/Java] 문과생도 이해하는 DFS 알고리즘! - 입문편
깊이우선탐색2 백준 24480 수업노트에...
//2. 오름차순 정렬 -> 내림차순 정렬로 수정하셔야 할 듯 ^^
-
해결됨세계 대회 진출자가 알려주는 코딩테스트 A to Z (with Python)
백준 문제풀이 팁
안녕하세요 강사님! 백준은 코드를 제출하고 틀렸을시에 어떤 테스트케이스에서 틀렸는지 알려주지 않는데요, 이럴때 틀린 부분을 고칠 방도가 전혀 생각나지 않는 경우가 많이 있습니다. 어떤 테스트케이스가 틀렸는지 잘 알아낼 수 있는 방법 있을까요?
-
해결됨세계 대회 진출자가 알려주는 코딩테스트 A to Z (with Python)
a와 b의 최대 공약수 시간 복잡도 질문
안녕하세요. 좋은 강의 감사합니다!a와 b의 최대 공약수 시간 복잡도에 대해 질문이 있는데요.약수를 구하는 시간 복잡도가 O(√n)이고, 최대 공약수를 구하기 위해서는 a, b 각각의 약수를 구하는 연산이 들어가기 때문에 최소 O(√a + √b)가 될 텐데 어떻게 O(√max(a, b))가 나오게 되는지 궁금합니다.
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
배추심기 질문이 있습니다.
http://boj.kr/2097fb2384af4c5ebffe94487b5d5a00메모리 초과가 나느데 이유를 잘 모르겠네요..
-
해결됨김영한의 실전 자바 - 중급 2편
컬렉션 프레임워크9에서 문제와풀이2의 문제6번에 대해 여쭤봅니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (아니오)[질문 내용]여기에 질문 내용을 남겨주세요.컬렉션 프레임워크9에서 문제와풀이2의 문제6번에 대해 여쭤봅니다. memberMap이라는 해시맵에서 첫번째 매개변수로 member.getId 가 들어가고 두번째 매개변수로 member클래스가 들어가는데 첫번째 매개변수가 member클래스의 멤버변수이어야 하는 이유가 있을까요? 문제를 풀던 중에 아직은 잘 모르겠지만 member클래스의 멤버변수 두개를 memberMap이라는 해시맵에 두개를 지정해도 될거같기도 한데(제 극히 초보인 관점에서 본 추측일 뿐입니다.그렇게 풀어볼 능력까진 없어서요.) 굳이 두번째에 클래스를 넣으시고 첫번째에 클래스의 멤버변수 하나를 넣으신 이유가 궁금합니다. 제 짧은 시각으로 보면 중복 같아 보여서요 질문6번의 의도가 파악이 안 돼서 궁금하여 여쭤봅니다.
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
3-Q 질문
http://boj.kr/5cc22e317fde47e8b77e3ffe89d2194a위와같이 풀어봤는데 효율측면에서 거리가 초과된다면 탐색을 그만하게 했습니다. 강사님 코드와 비교해봤을때 좀 더 효율적이라 할 수 있나요? 아니면 같은 효율일까요?
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
2-S vector선언 관련 질문 드립니다 :)
안녕하세요 선생님 🙂 그동안 풀었던 문제들을 마지막으로 점검하고 있는데요, 아무 생각없이 지나갔던 개념이 있더라구요. 그동안 풀었던 그리디 문제를 생각해보면, overflow 방지를 위해 아래처럼 vector의 크기를 미리 N으로 정해두었습니다.cin >> N; vector<pair<int, int>> vec(N);이렇게 선언한다면, 제가 알기로 vec은 N만큼의 크기를 가지면서, 요소를 채워넣지 않으면 컨테이너 내부에 어떤 값도 존재하지 않는 것으로 알고 있습니다. 아래는 2-S 문제에서 선언된 vector입니다. 이 문제와 더불어, 다익스트라에서 가중치와 도착 지점을 저장해주는 adj vector는 같은 형태를 띄고 있습니다.vector<int> vec[10004];이렇게 선언한다면 vec은 배열처럼 10004개의 칸이 생기며, 전역에서 생성할 경우에는 모든 칸이 0으로 초기화되는 것으로 알고 있습니다. 이 형태를 1번으로 변경을 하면서 'DFS함수에 파라미터로 vec을 넣어주면 되겠다'라는 생각으로 접근을 했는데요, 시작하자마자 에러가 발생했습니다. 혹시 vector<int> vec[10004]과 같은 형태는 vector<vector<int>>와 같은 타입인걸까요?이유가 무엇인지 알고싶습니다..!!
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
2-J 질문드립니다!
우선.. 저는 bfs로 풀었는데강사님 코드랑 유형을 보니깐 시뮬 구현이었군욥..! http://boj.kr/56216e6ba1ce4b12bbfcbcfa9450293c 우선, 궁금한 건 강사님 코드에선 18번 째 줄 while(a[i][j+1] == -1 )인데 이렇게 되면 j+1에서 오버플로우가 왜 일어나지 않았는지 궁금합니다!
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
7-R 아이디어 질문있습니다 :)
안녕하세요 선생님 🙂 문제풀이에 궁금한 것이 있습니다. 문제를 보자마자 먼저 투포인터를 떠올렸구요, 시간복잡도가 굉장히 크기 때문에 이분탐색을 생각했습니다. 하지만, 이분탐색을 사용하면 배열의 value 또는 인덱스 중 어떤 것도 탐색할 수 없기 때문에 올바른 방법이 아니라고 생각했습니다.아이디어가 너무 안떠올라서 정답풀이를 보니까 DP더라구요.. 머리가 너무 아픕니다 ㅠㅠ 문제를 풀이하는 방법은 다음과 같습니다. 어떻게 풀어야겠다는 아이디어아이디어를 어떤 알고리즘을 사용해서 어떻게 풀이해야겠다는 설계구현 그동안 문제를 풀면서 느낀 점은, 아이디어와 설계만 제대로 되어있다면 구현은 문제가 될 것이 없다는 것이었습니다. 반대로, 아이디어와 설계가 제대로 되어있지 않으면 구현은 해봤자 의미가 없었습니다. 이렇게 아이디어와 설계가 안떠오르는 문제들은 어떻게 극복해야할까요? 선생님의 조언이 절실하게 필요합니다..
-
해결됨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