- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. http://boj.kr/7cda610bf53f47c1a737bb078ccc36b5 안녕하세요 큰돌님. 예제 뿐만 아니라 반례들도 모두 맞는것 같은데 채점을 하면 퍼센트도 안뜨고 바로 틀렸다고 뜹니다.. 어떤 부분이 틀렸는지 모르겠습니다. 감사합니다.
안녕하세요. 큰돌 강사님, 해설이 이해가 되지 않아서 질문 드립니다. 역사 문제와 이 문제의 풀이 방법이 왜 다른 건지 궁금합니다. 역사 문제의 경우 플로이드 워셜로 풀었었는데, 사건들의 전후 관계를 알고 있으니 , 역사 문제도 현재 풀이처럼 v[a]++, v[b]--; 로 풀면 안되나요?? 아래 코드가 전혀 이해가 되지 않습니다.. 앞에 있는 학생의 점수를 키우고, 뒤에 있는 학생은 줄이면 어떻게 1~N까지 카드 숫자를 나눠 갖나요?? for (int i = 0; i < m; i++) { cin >> a >> b; v[a]++, v[b]--; } for (int i = 1; i <= n; i++) { v[i] += i; visited[v[i]]++; } 감사합니다 좋은 하루 보내세요
안녕하세요 큰돌님. 강의를 수강하면서 질문이 있습니다. 제가 몇시간동안 고민한 게 단 한 줄 추가로 시간초과 해결이 됬는데, 실전에서 이런 문제들을 만나면 과연 어떻게 해야할지 고민이 생기네요... 무작정 암기하는 방식은 공부가 아니라고 생각하는데 이런 문제들을 보면 또 암기가 맞다고 생각하게 되네요. 큰돌님은 어떻게 생각하시는지 또 어떻게 공부 방향을 잡아야하는지 궁금합니다.
안녕하세요 큰돌님! http://boj.kr/01de00905c874d749fef7bbf7313fc02 큰돌님의 풀이 방식이랑 조금 다른 방식으로 했는데요. 완탐 + dp을 생각해서 풀어봤는데 테스트케이스도 실패하고 어디가 문제인지 잘 감이 안잡히네요... 혹시 제 코드 봐주실수 있나요? 제 접근 자체가 잘못된거면 그냥 깔끔하게 접게요.... 풀릴꺼 같은데 안풀리니깐 미련이 자꾸 남습니다.
해당 문제에서 "3*8+5" 를 예시로 들어가면서 코드까지 옮기는 내용으로 수업을 해주셨습니다. 이 경우 당연하게 최대 1개 쌍의 괄호가 들어갈 수 있는 경우의 수가 2개이므로 수긍은 되었습니다. 하지만, 제가 생각하기에 최대 수식의 길이가 19이므로 그 경우의 괄호는 상당히 많아질텐데 현재의 2개의 경우의 수를 고려하는 코드로도 커버가 되는 건가요? 재귀 형태라서 그렇다기에는 이해가 잘 안 갑니다.. 길이가 11인 예시 "3+5-8*1*4+2" 만 해도 (3+5)-(8*1)*(4+2)로 최대 괄호의 수(쌍)가 3개짜리인 경우의 수가 상당히 많아질 수 있는데 현재의 코드가 어떻게 되는건지 모르겠습니다!
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요. 강의 잘 듣고 있습니다. 강의 풀이 참고하여 코드 작성하였는데. ans.push_back({it-LIS.begin(), A[i]}); 라인의 위치에 따라 "it-LIS.begin()"의 값이 쓰레기값일 때도 있고 그래서.., 현상의 이유가 궁금합니다. ans.push_back()을 뒤에 위치시켰을때, pos_ 값이 쓰레기값이 되는 이유 질문드려요. 그 이유로, LIS.push_back(A[i]); 가 수행되고 나면 LIS.begin()의 주소값이 변경되는 것으로 생각되는데, 맞을까요? 전체 코드>> #include <bits/stdc++.h> using namespace std; int N; vector<int> A; vector<int> LIS, Ret; int len; vector<pair<int, int>> ans; int main(){ cin.tie(NULL); cout.tie(NULL); ios_base::sync_with_stdio(false); cin >> N ; A = vector<int>(N,0); for(int i =0 ; i < N ; ++i) cin >> A[i]; for(int i = 0 ; i < N ; ++i){ auto it = lower_bound(LIS.begin(), LIS.end(), A[i]); ans.push_back({it-LIS.begin(), A[i]}); /* 현재 위치에서 push_back 하였을 떄: >> ans 배열에 담긴 값: ans = { {0, 10} {1, 20} {0, 10} {2, 30} {1, 20} {3, 50} } */ if (it == LIS.end()) LIS.push_back(A[i]); else *it = A[i]; /* 아래 위치에서 push_back 하였을 떄(주석): ans.push_back({it-LIS.begin(), A[i]}); >> ans 배열에 담긴 값: ans = { {-1405095968, 10} {-7, 20} {0, 10} {10, 30} {1, 20} {3, 50} } */ } cout << "디버깅" << endl; for(auto a : ans) cout << a.first << " " << a.second << endl; cout << endl; int len = LIS.size(); cout << len << endl; // 배열을 trace for(int i = N-1 ; i >= 0 ; --i){ if (ans[i].first == len-1){ Ret.push_back(ans[i].second); len--; } } reverse(Ret.begin(), Ret.end()); for(auto r: Ret) cout << r << " "; cout << endl; return 0; }
http://boj.kr/8cefb4955fb64d18ad353997d162cc29 제출시 77%에서 오답처리 되는데, 어느 부분이 틀렸는지 모르겠습니다. - 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요. 강의 잘 듣고 있습니다. 다름이 아니라. ll right = 1E18로 지정하면 제출시 틀렸습니다가 뜨고, ll right = 1E15 정도로 하면 정답이 뜨는데, mid 의 값계산이 잘못되고 있는건가 체크해봐도 오버플로우가 날만한게 없어서. 이유가 궁금합니다. #include <bits/stdc++.h> using namespace std; typedef long long ll; ll N, M; vector<ll> A; ll temp; bool check(ll mid){ temp = M; for(int i =0 ; i < M ; ++i){ temp += mid/A[i]; } return temp >= N; } int main(){ cin >> N >> M; A = vector<ll>(M,0); for(int i = 0 ; i < M ; ++i) cin >> A[i]; if ( N <= M) cout << N << endl; else{ ll left = 0; ll right = 1E18; ll ret = 0; while(left <= right){ ll mid = (left+right)/(long long)2; if(check(mid)){ right = mid-1; ret = mid; } else{ left = mid+1; } } temp = M; for(int i =0 ; i < M ; ++i) temp += ((ret-1)/A[i]); for(int i =0 ; i < M ; ++i){ if (ret % A[i] == 0) temp++; if (temp ==N){ cout << i +1 << "\n"; return 0; } } } return 0; }