- 질문 게시판입니다.
Date 19/10/03 22:00:24
Name   kaestro
Subject   c++ 에서 unordered map을 pair를 key로 사용할 때 순회
문제가 지도상에 상하좌우로 증식하는 세포가 주어질 때[맵의 크기 제한 없이] 일정 시간이 지난 후 살아있는 세포의 수를 세는 문제를 풀고 있는데,

솔루션에서는 문제 상에서 숫자 제약조건 때문에 나올 수 있는 최대보다 큰 배열을 이용해서 문제를 해결했는데, 저는 실제로 map 자료구조를 이용해서 문제를 풀어보고 싶어 그렇게 문제를 풀었습니다.

c++ map을 써서 돌아가는 코드는 만들었는데, 크기가 커지면 시간 제약 조건을 통과하지 못해서, 그럼 unordered map을 쓰면 되지 않을까? 하는 생각에 unordered_map으로 자료구조를 바꿨는데 지금 insert를 하고 나서 순회를 하면 문제가 생기더라구요.

아래 코드에서 simulation에서 iterator가 breeding을 하고 나면, 저장되어있는 simulation의 구조가 변형이 되면서 아직 순회해야하는 세포는 건너뛰거나, 아까전에 순회했던 세포를 재차 순회하는 문제가 발생하고 있습니다.

이 문제를 해결하려고 map을 따로 copy 뜨는 식으로 문제도 풀어봤는데, 이건 map을 copy하는게 오래 걸려서 그런지 기존의 map을 이용한 풀이보다 속도가 떨어지더라구요.

이런 경우에 unordered_map에 새로운 노드를 추가하면서, 아직 순회하지 않은 노드를 순회하고, 기존의 unordered_map을 카피하지 않는 방법이 있을까요?

감사합니다.

void simulate() {
    for (int i = 0; i < timeLimit; ++i) {
        for (myMap::iterator it = simulation.begin(); it != simulation.end();++it) {
          if (it->second.active == DEAD || it->second.lifetime == -1) continue;
          if (it->second.active == ACTIVE) {
                const ii& pos = it->first;
                const StemCell& sc = it->second;
                breed(pos, sc);
                it = simulation.find(pos);
            }
        }

        for (myMap::iterator it = simulation.begin(); it != simulation.end(); ++it) {
            it->second.increment();
        }
    }
}

void breed(const ii& pos, const StemCell& st) {
    for (int d = 0; d < direction.size(); ++d) {
        ii nextPos = { pos.first + direction[d].first, pos.second + direction[d].second };
        myMap::iterator it = simulation.find(nextPos);
      if (it == simulation.end()) {
            simulation[nextPos] = StemCell(-1, st.healthPoint);
        } else if (it->second.lifetime == -1){
          if (it->second.healthPoint < st.healthPoint) {
            it->second.healthPoint = st.healthPoint;
            }
        }
    }
}

ps. 전에 이런 질문 올렸을 때 코드 전문을 올려달라 하신 분이 계셨어서, 링크를 달아 둡니다.
(stl map 사용) https://github.com/kaestro/algorithms/blob/master/swexpert%20academy/5653.cpp
(stl unorderd_map 사용) https://github.com/kaestro/algorithms/blob/master/swexpert%20academy/5653_unordered.cpp



0


목록
번호 제목 이름 날짜 조회 추천
공지 질문 게시판 이용 규정 11 토비 15/06/19 27283 4
17275 여행후쿠오카~유후인 이동시 질문 11 whenyouinRome... 26/03/17 248 0
17274 IT/컴퓨터소모품 교체주기 관리앱 업데이트 해왔습니다 ! sharony 26/03/16 181 0
17273 문화/예술책을 찾습니다 2 호미밭의파스꾼 26/03/14 332 0
17272 여행미야코지마 여행 문의 2 2026(2025) 26/03/14 348 0
17271 여행3월말 동남아 휴양여행지(혼여) 추천부탁드립니다 23 even&odds 26/03/13 628 0
17270 기타인터넷,TV 질문입니다 4 김치찌개 26/03/12 281 0
17269 여행유럽(독일) 렌터카 문의 7 Picard 26/03/12 324 0
17268 여행여기는 가 봐도 별것 없겠지요? (매향항 부근) 3 트랜스메타 26/03/11 593 0
17267 기타이 건물 삼성타운 건물인가요? 8 풀잎 26/03/09 770 0
17266 법률회사 대표의 배우자(여성, 직원)은 출산 휴가나 육아 휴직 못 쓰나요? 6 [익명] 26/03/09 873 0
17265 의료/건강얇고 긴 변 또는 설사를 다시 굵게 만들 방법 없을까요? 7 활활태워라 26/03/08 741 0
17264 게임쵸딩이 할만한 비행기 게임? 16 2025(2025) 26/03/08 654 0
17263 기타융한스 시계 수리를 어디서 해야하나요? 5 2025(2025) 26/03/07 535 0
17262 여행김해공항 사설주차장 이용해 보신분 있을까요? 18 reika 26/03/06 565 0
17261 기타저번에 의견 주신 '소모품 관리 앱' 진짜로 만들어 왔습니다! 8 sharony 26/03/03 883 8
17260 의료/건강출산 생각이 있는 경우 어떤 탈모약을 복용하는 게 좋을까요? 15 [익명] 26/02/27 1143 0
17259 기타침대 매트리스 어떤 제품 많이 사용하시는지요...? 6 홍당무 26/02/27 634 0
17258 연애예비 배우자의 고양이 문제 26 [익명] 26/02/27 1310 0
17257 IT/컴퓨터직장인들이 많이 쓰는 서류 양식 모아두는 사이트 어떤가요 ? 3 sharony 26/02/26 728 0
17256 여행남부터미널 예매는 다른 사람에게 보내줄 수 없나요? 5 영원한초보 26/02/26 683 0
17255 댓글잠금 기타유머글 찾습니다.. 4 [익명] 26/02/25 737 0
17254 가정/육아전북 가족여행 5 반대칭고양이 26/02/25 507 0
17253 경제3차 상법 개정안으로 인해 경영진이 어떻게 대처 할지 양상이 궁금합니다. (제목수정했습니다) 13 내일로가는문 26/02/24 877 0
17252 가정/육아창문형 에어컨 어디다 설치하는게 좋을까요? 16 DogSound-_-* 26/02/23 581 0
목록

+ : 최근 2시간내에 달린 댓글
+ : 최근 4시간내에 달린 댓글

댓글