DOLLS RTE 질문드립니다. gandhihb 안녕하세요? 최근에 가입하여 JMBook 보면서 이문제 저문제 풀고있는 초보입니다. DOLLS 에서 RTE (SIGSEGV: segmentation fault, probably incorrect memory access or stack overflow)가 났는데, 해결이 요원하여 질문글을 올립니다. 우선, 문제를 해결하려고 접근한 방식은 아래와 같습니다. 가장 적은 갯수의 인형 종류를 찾고, 그 인형의 갯수* 남은 인형 종류 <= 구해야할 전체 갯수이면, 남아있는 전체 인형 종류를 돌면서 1에서 구한 갯수만큼 빼고 해당 갯수만큼 카운터를 올려준다. 1에서 찾은 가장 적은 갯수의 인형 종류는 아예 빼버린다. 위 과정을 반복하다 2가 아니면, 남아있는 인형들을 하나씩 종류별로 순서대로 카운팅 해주다가 구해야할 갯수가 되면 멈추고 카운팅 된 갯수들을 출력한다. 메모리를 깨먹을 법한 부분은 없어보이는데.. 아니면 stack overflow라면, 다른 메모리를 더 적게 쓰는 자료구조형을 이용하도록 고민해야할까요? 아래는 코드입니다. #include <iomanip> #include <cstdio> #include <algorithm> #include <iostream> #include <vector> #include <set> #include <map> #include <queue> #include <utility> #include <string> using namespace std; int T, n, m; int doll, cnt; bool byIndex(pair<int, int> a, pair<int, int> b) { return a.second < b.second; } int main() { freopen("sample_input.txt", "r", stdin); cin >> T; while (T--) { scanf("%d %d", &n, &m); //인형을 갯수/인덱스 순서로 deque에 저장 deque<pair<int, int> > dolls; vector<int> selected; selected.resize(n,0); for (int i = 0; i < n; i++) { scanf("%d", &doll); dolls.push_back(make_pair(doll, i)); } //인형을 갯수의 오름차순으로 정렬 sort(dolls.begin(), dolls.end()); int remain = m; int remain_type = n; while (remain >= dolls[0].first*dolls.size()) { int current_quantity = dolls[0].first; remain -= current_quantity * dolls.size(); for (deque<pair<int,int> >::iterator it = dolls.begin(); it != dolls.end(); it++) { selected[(*it).second] += current_quantity; (*it).first -= current_quantity; } dolls.pop_front(); } //남아있는 인형들을 인덱스의 오름차순으로 정렬 sort(dolls.begin(), dolls.end(), byIndex); deque<pair<int, int> >::iterator iter = dolls.begin(); while (remain && !dolls.empty()) { selected[(*iter).second]++; (*iter).first--; iter++; if (iter == dolls.end()) iter = dolls.begin(); remain--; } for (vector<int>::iterator it = selected.begin(); it != selected.end(); it++) { printf("%d ", *it); } printf("\n"); } return 0; } 조언 부탁드립니다. 감사합니다. 8년 전
2개의 댓글이 있습니다. 일루 2-4 과정을 n번 반복하고 나서 다시 2번으로 가면 RTE가 날 것 같습니다. 사실 그걸 고쳐도 알고리즘이 비효율적이라 TLE가 나야 할 것 같습니다. 안 난다면 데이터가 약한거니 연락해주세요~ 8년 전 link gandhihb 답변 감사합니다. 해당 부분 고쳐서 TLE 나는것 확인했습니다 ㅠ.ㅠ 좀 더 고민해서 다른 방법으로 구현해볼께요~ 8년 전 link 정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.
gandhihb
안녕하세요? 최근에 가입하여 JMBook 보면서 이문제 저문제 풀고있는 초보입니다.
DOLLS 에서 RTE (SIGSEGV: segmentation fault, probably incorrect memory access or stack overflow)가 났는데, 해결이 요원하여 질문글을 올립니다.
우선, 문제를 해결하려고 접근한 방식은 아래와 같습니다.
메모리를 깨먹을 법한 부분은 없어보이는데.. 아니면 stack overflow라면, 다른 메모리를 더 적게 쓰는 자료구조형을 이용하도록 고민해야할까요?
아래는 코드입니다.
조언 부탁드립니다. 감사합니다.
8년 전