게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
본삭금) C++ map과 vector 관련 질문드리겠습니다. 부탁드려요
게시물ID : programmer_10098짧은주소 복사하기
작성자 : 자이제
추천 : 0
조회수 : 484회
댓글수 : 4개
등록시간 : 2015/05/15 17:45:58
옵션
  • 본인삭제금지
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include <vector>
#include <algorithm>
#include <functional>
#include <iostream>
#include <map>
using namespace std;
 
class FilipTheFrog{
public:
    int countReachableIslands(vector<int> positions, int L){
        map<intint> reachable;
        reachable[0= positions[0];
 
        for (map<intint>::iterator map_iter = reachable.begin(); map_iter != reachable.end(); map_iter++)
        {
            for (unsigned int i = 0; i < positions.size(); i++)
            {
                if (abs(map_iter->second - positions[i]) <= L)
                {
                    if (reachable.find(positions[i]) == reachable.end())
                    {
                        reachable[reachable.size()] = positions[i];
                    }
                }
            }
        }
 
        return reachable.size();
    }
};
 
int main(){
    FilipTheFrog result_class;
 
    int result = result_class.countReachableIslands({ 47135 }, 1);
    
    
    cout << result << endl;
    return 0;
}
cs
20번째 줄의 if조건문에서 find 멤버 함수를 이용해서 reachable 안에 positions[i]와 동일한 value가 없으면 reachable에 그 값을 삽입하고 아니면 그냥 넘어가게 하려고 하는데
reachable.find(k) 일 때 k 값이 없다면 end() 반복자를 가리키니까 중복된 값은 저장되지 않도록 될줄 알았는데 2번이나 더 4가 저장되더라구요.
디버그했을 때 최종적으로 reachable에 저장된 값은 (key, value)가 순서대로 (0, 4) (1, 4) (2, 3) (3, 5) (4, 4) (5, 5)가 됩니다.
원하는 값은 (0, 4) (1, 3) (2, 5)이고 따라서 리턴 값이 3이 되었으면 좋겠는데 중복된 값이 저장되서 리턴 값이 6이 되네요..
어떻게 수정해야 중복된 값이 저장되지 않을지 모르겠습니다. ㅠ
전체 추천리스트 보기
새로운 댓글이 없습니다.
새로운 댓글 확인하기
글쓰기
◀뒤로가기
PC버전
맨위로▲
공지 운영 자료창고 청소년보호