- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. http://boj.kr/ea14b76bba984f7d95c8c9a8ba109d94 선생님 ㅠㅠㅠ 이게 도대체 왜 안되는건지 잘 모르겠습니다...
안녕하세요. 교안 p136 예제 코드에서 #include <bits/stdc++.h> using namespace std; struct Point { int y, x; }; struct cmp { bool operator()(Point a, Point b) { return a.x < b.x; } }; priority_queue<Point, vector<Point>, cmp> pq; int main() { pq.push({1, 1}); pq.push({2, 2}); pq.push({3, 3}); pq.push({4, 4}); pq.push({5, 5}); pq.push({6, 6}); cout << pq.top().x << "\n"; return 0; } operator가 오버로딩 된 것까진 알았는데 그럼 operator()는 ()라는 연산자를 오버로딩 한 것인가요..?? ()라는 연산자는 무슨 의미를 가진 건가요..? ㅜㅜ 설명해주시면 감사하겠습니다. priority_queue<Point, vector<Point>, cmp> pq; 그리고 이렇게 priority_queue를 선언할 때 인자가 세개 들어가는 게 각각 무슨 의미인지 설명해주실 수 있나요..? 검색을 해도 언급되는 부분을 못 찾겠어서요ㅜㅜ
http://boj.kr/e351fd164d5943d29c80fef4e6fb27d6 자식노드를 담아주는 인접 리스트를 만들고, cut함수로 잘라낸 노드와 그 자식들을 dead체크를 해주었습니다. 그리고 남은 트리에 관하여, dead 체크와 자식 체크를 해주어 리프 노드를 구해봤는데 무엇이 잘못된 것일까요 ...
안녕하세요 큰돌님 😀 교안 p131의 'x를 1순위로 오름차순으로 정렬하고 y가 2순위로 내림차순 z가 3순위로 오름차순 정렬이라는 문제'의 예제 코드에서 struct Point { int x, y, z; Point(int y, int x, int z) : y(y), x(x), z(z) {} Point() { y = -1; x = -1; z = -1; } bool operator<(const Point &a) const { if (x == a.x) { if (y == a.y) return z < a.z; // 3순위 : z가 오름차순 return y > a.y; // 2순위 : y가 내림차순 } return x < a.x; // 1순위 : x가 오름차순 } }; operator< 오버로딩 부분에서 오름차순, 내림차순이 어떻게 정해지는 것인지 정렬 로직이 궁금합니다. 검색해보았더니 operator< 가 Point 내부에서 자체적으로 정렬을 시킨다고 했는데, 그럼 operator< 매개변수로 들어오는 a가 어떻게 들어오게 되고 정렬을 어떻게 시키는 건지 이해가 안갑니다..ㅜㅜ 예를 들어서 Point의 지역변수 x, y, z와 a의 x, y, z를 비교했을 때, x < a.x 가 false 이면 자리를 바꾸는 것인가요..?ㅠㅠ 로직 자체가 이해가 안 갑니다. 그리고 Point 구조체를 만드실 때 변수를 y, x 순으로 받으시는 것도, 이렇게 하면 더 편리한 이유가 있는건지 질문드리고 싶습니다! 감사합니다.
http://boj.kr/4ff659025d334003940b3c0246e40c58 카운트를 할 때 인덱스 0에 A카운트, 1에 B카운트 .. 진행을 해서 구현했습니다. if(mid) { answer.insert(answer.begin() + answer.size() / 2, mid + 'A'); } 하지만 mid값을 중앙에 넣을 때 조건문에서 문제가 있는데 예를 들어 AAAAA를 넣으면 결과값으로 AAAA가 나옵니다. 홀수 알파벳이 A일 때 조건문에 들어가지를 못해서 하나가 빠지는 것 같은데.. 인덱스 1일 때 A 카운트, 2일 때 B 카운트 하는 방식으로 해결할 수는 있지만 다른 방법은 없을까요?
안녕하세요 선생님! 제가 이해하는 것이 맞나 싶어서 여쭤보고자 질문올립니다! Q1. 밑에 이부분에서는 go(0,1,m-1)같은 경우와 go(0,0,m)는 완탐 시 처음 시작하자마자 움직이는 경우에 수를 나누어서 쭉쭊죾 한다음에 max값을 찾기 위해 구현한 것이 맞을까요? cout << max(go(0, 1, m - 1), go(0, 0, m)) << '\n'; Q2. 밑에 이 부분에서 ret을 참조자로 받아서 반환하는 이유가 혹시 있을까요? 참조자를 사용하지 않으면 시간초과가 나더라구요.. 참조자를 통해서 직접 적으로 dp배열의 값을 참조하면 메모리를 효율적으로 쓸수 있어서 그런건가여? 근데 또 궁금하게 int &ret을 계속 생성하는건데.. 조금 햇갈립니다..ㅠ int &ret = dp[idx][tree][cnt]; if(~ret) return ret; Q3. 이 부분은 현재의 index에서 다음 인덱스로 갈떄 옆에 트리로 가는경우 안가는경우나눠지는 것으로 해석하였습니다. 그런데 뒤에 go함수 같은경우는 나무이동을 안할떄로 알고 있씁니다. 뒤에 (tree ==b[idx]+1) 같은 경우는 다음 go로 넘어가기 전 현재의 위치에 tree와 그 시간대 tree에 위치가 같으면 +1 (idx시간 떄 자두를 받았기 떄문) 아니면 0을 더하는 것 이 맞나요?!? return ret = max(go(idx + 1, tree^1, cnt - 1), go(idx + 1, tree, cnt)) + (tree == b[idx] - 1); Q4. 이건 문제와 외람된 말이긴 합니다. 지금 매 주차 개념설명 들으며 2~3문제 씩 주차 문제 풀면서 다음 주차 개념을 빠르게 듣고 있습니다. 과정이 너무 어려운데 이해가 안되면 문제를 외우기보다는 그 과정이 어떤식으로 대처해야하는지 위주로 공부하고 있습니다. 잘하고있는걸까여ㅠ,,
코드를 아무리 봐도 DP에 넣은 값들이 여태까지 지나온 경로들의 최적해가 아니라 visited에 포함되지않은 남은 경로들의 최적해 인거같아요.... 설명에서는 앞에서부터 쌓아가는거 처럼 설명하시는데( (a b c)든 (a c b)든 최적의 값을 구해서 d로 가면 되는거아니냐는 부분) 제가 이해를 잘못 한건가요???
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요 선생님 http://boj.kr/cd54b57de0df4ce294ae9ff069c83984 next를 변수를 선언하는 것과 다음과 같이 코드를 작성하는 것에 왜 값이 다르게 출력이 되는지 여쭤보고 싶습니다. 제 코드를 돌리면 이렇게 나와요!
#include <iostream> using namespace std; int main() { int n,a; int max = 0; int min = 0; cin >> n; for (int i = 1; i <= n; i++) { cin >> a; if (a > max) { max = a; } if (a < min) { min = a; } } cout << max - min; return 0; } 이렇게 했을 때 값이 제대로 나오지 않습니다. 초기화 부분에서 max와 min에 0을 넣으면 왜 값이 다르게 나오나요..?
와.. 일단 저는 다른 방법으로 풀었는데 제가 푼 방식으로의 접근에 익숙해지면 더 난이도 높아지는 그리디 문제는 대처를 못하겠죠? ㅠ.. 큰돌님 로직이 큰 가격만 남게되는건 쉽게 이해했는데 if(pq.size() > v[i].first) 이 코드 하나로 큰 가격 + 하나의 날짜에 하나만 꽂기가 가능해지는것에 이마를 탁 치고 갑니다... 그래도 제 코드 한번 봐주시고 피드백 한번 주시면 감사하겠습니다. 저는 가격으로 내림차순 sort한다. visited[10004]를 만들어놓는다. 가장 큰 가격부터 자신의 Day에 visited[Day] = true로 해준다. 만약 자신의 Day에 visited[Day]가 이미 true라면 Day-1부터 1일까지 visited[]가 false일 날을 찾아 거기에 넣어준다.(찾았으면 break) 이 로직으로 풀었습니다! https://www.acmicpc.net/source/73577847
http://boj.kr/e1c4b7529c7d4925bb95b0e38d7aec56 처음에는 1~10억으로 이분탐색을 했었는데요 시간초과가 나서 배열에 있는 값들을 더하고 확인하는 시간이 오래 걸리나 싶어서 누적합으로 해서 풀었는데 큰 차이는 없었습니다. 못풀어서 결국 강의 봤는데if (mx > mid) return false; 부분을 보고 감탄을 금치 못했는데요.. 누적합으로 바꿨을 때 답이 아니었던게 좀 충격이었던지라 누적합을 이런 용도로 사용하는 것이 아닌가?라는 의문이 들기도 하고 .. 누적합의 퍼포먼스를 최대로 낼 수 있는 문제가 막 떠오르지가 않아서 잘 이해하고 있는지 의문이 들어 글 남겨봅니다 ㅜㅜ