- 질문 게시판입니다.
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 26873 4
17221 기타노원구 틴팅업체? 1 2025 26/02/01 163 0
17220 체육/스포츠골프 치시는 분들, 골프의 재미는 무엇입니까? 15 은하꾸리 26/01/31 453 0
17219 연애연애 조언 부탁드립니다. 13 [익명] 26/01/31 684 0
17218 문화/예술요즘 녹음된 클래식 음악 추천 바랍니다 11 헬리제의우울 26/01/31 284 0
17217 여행일산 킨텍스 숙소 (4월 12일-16일) 6 celestine 26/01/30 308 0
17216 기타영아 돌연사의 경우가 종종있나요... 9 하우두유두 26/01/30 711 0
17213 기타과메기를 주문하고 싶읍니다. 4 모크샤 26/01/30 366 0
17212 기타안에 털 들어가있는 방한화 안전하고 편안한지요...? 4 홍당무 26/01/29 349 0
17211 기타더글로우 갈까요 말까요 4 골든햄스 26/01/28 571 0
17210 IT/컴퓨터모니터와 멀티탭의 일반적인 수명? 이 궁금합니다. 15 K-이안 브레머 26/01/28 535 0
17209 가정/육아여권사진을 셀프로 찍어서 온라인으로 신청하려고 하는데요. 혹시 요령이 있을까요? 10 문샤넬남편 26/01/26 713 0
17208 의료/건강오늘 강냉이 빼러갑니다 2 DogSound-_-* 26/01/26 381 0
17207 기타가방을 사고싶은데 너무 비싸서 뭘 사야할지 모르겠어요... 17 dongri 26/01/25 648 0
17206 진로나이에 비해 너무 어리다는 생각이 듭니다 18 JaneJ 26/01/25 922 0
17204 가정/육아처가에 다니는 게 스트레스입니다 20 [익명] 26/01/23 1131 0
17203 기타지름병이 왔습니다. 아이템 추천해주십시오 22 쉬군 26/01/22 652 0
17202 문화/예술똑딱이 카메라 추천 부탁드립니다 8 Mandarin 26/01/22 343 1
17201 기타병원 질문입니다 1 김치찌개 26/01/21 305 0
17200 경제단독주택 매물 볼 수 있는 곳이 있을까요? 7 루루얍 26/01/19 708 0
17199 문화/예술유럽/독일식 비즈니스 문화를 알려주는 책/리소스? 4 열한시육분 26/01/18 674 0
17198 여행중국 골프여행 여행사 추천 해주세요 유니브로 26/01/17 303 0
17197 경제한국 한정 테슬라가 왤케 인기가 많죠? 28 whenyouinRome... 26/01/17 1086 0
17196 게임게임 추천 좀 부탁드려요 어둠달골짜기 26/01/16 444 0
17195 의료/건강60대 여성의 불면증 치료 문의. 6 [익명] 26/01/15 715 0
목록

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

댓글