- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 3.8 비트단위 연산자 bitwise operators 강의 8:00분부터 보면 위에 using namespace std;를 사용했는데 bitset 부분에 왜 s td::를 붙이는지 궁금합니다.
template <class T> class shared_ptr { public: shared_ptr (shared_ptr const& r); // "타입 const& 이름" 의 의미?? template <class Y> shared_ptr (shared_ptr<Y> const& r); ... }; 여기서 잘 모르겠는게 2가지가 있는데요... 첫 째는 참조자 선언에 const가 붙은 위치입니다. 포인터에선 int* const abc = &d; 처럼 타입 뒤에 const 가 붙어서 주소를 못 바꾸게 하는게 있는건 아는데요. 저 예제에서 " shared_ptr & const r "이 아니고 " shared_ptr const & r " 로 & 의 위치가 다르게 되어있는 의미가 무엇인지 잘 모르겠습니다.. 그리고 두번째는 shared_ptr 클래스가 템플릿인데 맨 첫번째 일반 복사 생성자 에서 매개변수 로 shared_ptr 이라는 타입으로 받는다는 의미가 무엇인지 잘 모르겠습니다. shared_ptr<T> 도 아니고 딱 "shared_ptr" 만 써져 있는 건 어떤 의미가 있는 건가요???
안녕하세요 선생님 ! 항상 좋은 강의 감사합니다. 이번 보석 상자 강의도 너무 잘 들었는데요, 처음에 혼자 생각해보다가 못 풀고 강의 보고 다시 정리해서 풀어봤습니다. 그런데 첫 제출에서 DivisionByZero 에러가 나서 99% 정도에서 틀렸다고 나오더라고요 탐색을 하는 부분에서 mid가 0일 때 return false를 줘서 두 번째 제출에 성공하긴 했는데, 첫 코드도 선생님 코드와 거의 비슷한 것으로 보여서요 어떤 부분이 잘못됐는지 궁금합니다 ! DivisionByZero 난 코드: https://www.acmicpc.net/source/77479342 정답 코드: https://www.acmicpc.net/source/77479392 감사합니다 !!!!!!
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요. 2-A 2178번처럼 Map에서 BFS 탐색을 하는 경우에도 시간복잡도는 O(V+E)인가요? 감사합니다.
처음 알고리즘을 공부하게 된 학생입니다. 알고리즘 문제풀이를 시작할 때 어떤 방식으로 하면 될지 질문드립니다. 우선 교안은 한번 다 익혔습니다. (중간 중간 생각나지 않는 부분도 있긴합니다.) 2309번 문제를 스스로 풀어본다. 문제해설을 본다. 문제해설을 다 이해하고 공부한 뒤 강의를 듣는다. 이러한 순서로 공부를 하는게 맞을까요? 그리고 문제가 풀리지 않을때는 고민해보다가 답지를 보는게 나을까요??
코드를 작성하고 돌려보니 1 ~ 2 pass였지만 나머지 3 ~ 5번에서 문제가 발생하였습니다. 그래서 코드를 다시 확인을 해봐도 원인를 못 찾았다. 그래서 강사님의 코드로도 체점을 진행해보니 동일한 결과가 발생하였습니다. 그래서 in 3 ~ 5을 보니 문제와 다르게 배열의 크기가 100,000 으로 설정되어 있는 것을 발견하였습니다. 아마 제 예상으로는 in 3 ~ 5까지의 문제가 다른 문제로 바꾼 것 같습니다. 한번 확인해주시면 감사합니다.
안녕하세요 선생님, 4-B 문제를 선생님 풀이를 보고 다시 풀어봤습니다. 입력배열 A의 크기를 문제에서 주어진 최댓값인 20으로 설정할 때는 메모리초과로 오류가 나는 데, 혹시나 해서 21로 늘려보니 통과했습니다. http://boj.kr/985212f27de447b19f0c9794794c53e6 http://boj.kr/915ba15212a94c9782d0a40dc8e1ce0c 어디서 문제가 생기는 지 알 수 있을까요? 강의 항상 잘 보고 있습니다. 감사합니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. http://boj.kr/ef8ad015457e4bbba05ac351eb5ae0d8 안녕하세요 강사님 7-M 문제에서 살아있는 나무는 정렬을 위해 deque를 사용했고죽은 나무는 queue를 사용해서 양분으로 바꿔줬는데 계속 시간초과에서 막혀 질문글 남깁니다...이 문제는 deque로 풀면 안되는 문제일까요? 아니면 제 코드에서 시간을 단축 시킬만한 곳이 있을까요?
for(int i = 1; i <= n; i++){ cin >> m; for(int j = 0; j < m; j++){ cin >> temp; adj[i].push_back(temp); adj[temp].push_back(i); } } 입력을 받아서 인접 노드들을 벡터에 삽입해주셨는데, adj[temp].push_back(i); 이 부분이 들어가게 되면 같은 노드가 2번씩 벡터에 삽입되지 않나요? 예를 들어, 예제 입력 1에서 보면 1~6번 구역마다 인접 구역을 입력으로 받으니까 adj[i].push_back(temp); 이코드만 있어도 양방향 간선이 표시된다고 생각합니다. a[1] => {2, 4} a[2] => {1,3,6,5} a[3] => {4, 2} a[4] => {1, 3} a[5] => {2} a[6] => {2} 이렇게요
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 답이 틀렸다고 나오는데, 어디가 잘 못 된건지 궁금합니다. import java.io.*; import java.util.*; public class Main { public static void main(String[] argvs) { Scanner sc = new Scanner(System.in); String s=sc.next(); int res=0; int sum=0; for(char x : s.toCharArray()) { if(Character.isDigit(x)) { res = res*10 + (x-48); } else { sum+=res; res=0; } } System.out.print(sum); } }
http://boj.kr/f9e04dedecf9402eb6e1bcb1042dcfa6 선생님 안녕하세요. 선생님이 작성해주신 답이랑 비교해봤을 때, 차이가 나는 부분은 if문을 통해 idx가 a[i].first보다 큰지 작은지를 가른뒤, 계산해주는 부분밖에 없는 것 같습니다. 선생님께서는 a[i].second - a[i].first 또는 idx 이런식으로 직접 해주셨고, 저는 s라는 변수에 a[i].first 또는 idx 를 담아줘서 계산해준 것 밖에 차이가 없다고 생각하는데요. 어떤부분이 달라서 정답이 아니라고 나오는 걸까요?? (if(a[i].second <= idx) continue; 이부분은 문제에 웅덩이는 겹치지 않는다는 조건이 있어서 넣지않았습니다.)
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. #include<stdio.h> #include<algorithm> using namespace std; int a[1001], n; int Count(int s){ int i, cnt=1, sum=0; for(i=1; i<=n; i++){ if(sum+a[i]>s){ cnt++; sum=a[i]; } else sum=sum+a[i]; } return cnt; } int main(){ //freopen("input.txt", "rt", stdin); int m, i, lt=1, rt=0, mid, res, maxx=-2147000000; scanf("%d %d", &n, &m); for(i=1; i<=n; i++){ scanf("%d", &a[i]); rt=rt+a[i]; if(a[i]>maxx) maxx=a[i]; } while(lt<=rt){ mid=(lt+rt)/2; if(mid>=maxx && Count(mid)<=m){ res=mid; rt=mid-1; } else lt=mid+1; } printf("%d\n", res); return 0; } 강사님께서 직접 올려주신 코드 복사해서 돌려봐도 채점 결과가 아래 사진과 같이 뜹니다 그동안 다른 문제들 채점 프로그램은 이상이 없었는데 43번만 채점결과가 이상해서 질문 드립니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요 21번 문제 질문드립니다. 문제에서 두 사람 모두 0-9까지 카드를 중복없이 각 한 장씩 갖고 있다고 하였는데, 코드 상에서 이에 대한 예외처리가 없어 scanf로 데이터 넣어주는 부분에서 이중 for문을 돌리면 될까요? 다른 좋은 방법이 있을지 문의드립니다.
안녕하세요 큰돌님. 풀이를 몇번을 봤는데도 이해가 가지 않아서 질문드립니다. 이분탐색으로 찾으려는 것 - 실제 필요한 시간보다 조금 더 큰 시간 - 즉, ret이 놀이기구를 타는데 걸린 총 시간이 됨 ret - 1 / a[i] - ex) 문제 예시 들어주신 것처럼 4분이 딱 되었을 때 새롭게 타는 사람 수를 빼주기 위해 하는 로직 전체 묶음을 다 처리하고 놀이기구에 아무도 안 탄 상태로 가정하고 그 부분부터 한명씩 태우는 로직 이렇게 파악하긴 했는데, 아무리 봐도 2번, 3번이 전혀 이해가 가지 않습니다... 놀이기구 수만큼을 바로 태울 필요가 있나요? 처음 시작을 temp = m으로 시작하지 않고 temp = 0을로 시작하면 4분일 때 딱 7명 태운걸로 나와서 ret - 1 / a[i] 로직을 안해도 되지 않나요? 그리고 마지막에 총 걸린시간(ret) % a[i] 로직이 어떤 의미인건지 이해가 안 됩니다 ㅠㅠ 아래는 제가 선생님 코드를 이해하려고 주석을 달아본 코드입니다. #include<bits/stdc++.h> using namespace std; #define max_n 60000000004 #define MAX_M 10004 typedef long long ll; // ret : 총시간, temp가 m : 여기서 부터 시작 ll n, m, a[MAX_M], lo, hi = max_n, ret, mid, temp; bool check(ll mid) { temp = m; // 놀이기구 수만큼은 바로 태울 수 있으므로 m명은 태우고 시작 for (int i = 0; i < m; i++) temp += mid / a[i]; return temp >= n; // 총 걸리는 시간이 mid일 때 n명이상 태울 수 있는지 } int main() { cin >> n >> m; for (int i = 0; i < m; i++) cin >> a[i]; if (n <= m) { cout << n; return 0; } while (lo <= hi) { mid = (lo + hi) / 2; if (check(mid)) { ret = mid; // 총 걸린 시간 hi = mid - 1; } else lo = mid + 1; } // temp : 4분까지 태운 학생 수 -> 4분이 딱 됐을 때 바로 추가로 태울 수 있는데 그걸 뺀 순수하게 4분까지 태운 학생 수 temp = m; for (int i = 0; i < m; i++) temp += ((ret - 1) / a[i]); // 4분부터 시작해서 다시 순차적으로 놀이기구 태움 -> 즉, 여기서는 놀이기구에 아무도 타있지 않은 초기 상태임 for (int i = 0; i < m; i++) { if (ret % a[i] == 0) temp++; // % 연산의 결과가 0이 아날 경우 == 놀이기구에 이미 학생이 탑승되어 있음 if (temp == n) { cout << i + 1 << "\n"; return 0; } } return 0; }
[게임 프로그래머 입문 올인원] C++ & 자료구조/알고리즘 & STL & 게임 수학 & Windows API & 게임 서버
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 강의를 보다보면 미로맵 제작 같이 다운로드가 안되는 코드를 올려주신 다는 말씀을 하시는데 혹시 코드는 어디서 다운 받을 수 있을까요?