해결된 질문
작성
·
136
0
답변 1
0
안녕하세요 kkh님 ㅎㅎ
1.맵을 순회하면서 맵의 요소를 erase하면 문제가 생기는지(디버깅을 해보니 제가 원하는 방식과 다르게 작동하더라구요)2.조건에 맞는 요소들을 안전하게 제거하면서 맵을 순회할수 있는 방법이 있는지입니다
>> 네 맵을 순회하면서 맵의 요소를 erase하는 것자체는 안전하지 못한 방법입니다. 순회하다가 해당 요소가 사라질 수도 있기 때문에 예상한 로직과 다르게 나타날 수 있는 것이죠.
kkh님이 의도하신 건 아마 이런게 아닐까 싶습니다.
#include <bits/stdc++.h>
using namespace std;
int main() {
int n, m;
cin >> n >> m;
map<int, int> mp;
vector<int> keys;
int ret = 0;
for (int i = 0; i < n; i++) {
int temp;
cin >> temp;
mp[temp]++;
keys.push_back(temp);
}
for (int key : keys) {
if (mp.find(key) != mp.end() && mp.find(m - key) != mp.end()) {
if (key != m - key || mp[key] > 1) {
ret++;
mp.erase(key);
mp.erase(m - key);
}
}
}
cout << ret;
return 0;
}
지금 보시는 것처럼 키에 대한 것을 vector에다 담아서 해당 요소가 사라지더라도 안전하게 순회하면서도 mp.find를 통해 로직을 수행한 것을 볼 수 있습니다.
이렇게 한번 제출해보시겠어요?
또 질문 있으시면 언제든지 질문 부탁드립니다.
좋은 수강평과 별점 5점은 제게 큰 힘이 됩니다. :)
감사합니다.
강사 큰돌 올림.