해결된 질문
작성
·
208
0
103p 앞부분 설명에서,
'다만 앞의 코드는 문제에서 해당 키값에 0이 아닌 값이 들어갈 때 활용이 가능합니다. 만약 문제에서 키에 0이 들어가는 경우 앞의 코드는 활용이 불가능합니다.
예를 들어 문제에서 {0, : 주홍철}, {1, 역사} 이렇게 담는다면 불가능하고, {1 : 주홍철} , {2, 역사} 이렇게 담는다면 해당 로직에 사용가능합니다.'
부분이 잘 이해가 가지 않습니다..
왜 {0, : 주홍철}, {1, 역사} 이렇게는 불가능한 것이고 {1 : 주홍철} , {2, 역사} 이렇게면 가능한 것인가요?
102p 코드 예시는 map<int, int>인데 103p 설명 예시는 map<int,string>인 경우에서 다시 설명해주신 것 같은데 잘 이해가 가지 않습니다 ..
답변 3
1
안녕하세요 종현님ㅎㅎ
예를 들어 문제에서 {0, : 주홍철}, {1, 역사} 이렇게 담는다면 불가능하고, {1 : 주홍철} , {2, 역사} 이렇게 담는다면 해당 로직에 사용가능합니다.
이미 if문 안에 mp[1] == 0을 해버린 순간 이미 mp[1] = 0이 할당되어버리기 때문이죠.
이 부분 말씀하시는거죠?
이부분 설명을 제가 잘못한 거 같습니다 key가 아니라 value에 들어가는 값이 0이 되면 안되는데 해당 부분 설명이 잘못되어있네요.
다시 설명하자면 다음과 같습니다.
다만 앞의 코드는 문제에서 해당 키에 0이 아닌 값이 들어갈 때 활용이 가능합니다.
이미 if문 안에 mp[1] == 0을 해버린 순간 mp[1] = 0이 할당되어버리기 때문입니다.
해당부분은 교안에 반영될 예정입니다.
또 이해 안 되시면 말씀해주시면 다시 답변 드리겠습니다.
감사합니다.
0
0
int N;
string ret;
map<char, int> m;
int main() {
cin >> N;
for(int i = 0; i < N; i++) {
string s;
cin >> s;
if (m[s[0]] != 0) {
m[s[0]] += 1;
} else {
m.insert({s[0], 1});
}
}
for(auto it : m) cout << "it.first: "<< it.first << " it.second " << it.second << '\n';
}
혹시 해당 코드에서도 it.second가 항상 0인데 위 질문 개념에 근거한 이유일까요?
저는 if (m[s[0]] != 0)에서 s[0]와 동일한 key에 접근해서 해당 키의 value가 0이 아니라면 해당 value에 += 1을 해주려고 하는데 디버깅해보면 insert된 후 value들에 0이 계속 할당되는 것 같더라구요 ㅜ
mp[0] 이런식으로 참조를 하게 되는 순간 0이 생겨버리게 됩니다.
예를 들어 if(mp[0]) 을 하기만 해도.
mp[0] = 0으로 할당되게 됩니다. 그래서 value에 0이 들어가는 로직에는 사용할 수 없습니다.
map에 ~~한 요소가 있는지를 확인하고 어떠한 로직을 구축하고 싶은데 참조하는 순간 0이 들어가니까요.