알고리즘 교안 103페이지 map 사용시 주의점
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
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이 계속 할당되는 것 같더라구요 ㅜ
1
mp[0] 이런식으로 참조를 하게 되는 순간 0이 생겨버리게 됩니다.
예를 들어 if(mp[0]) 을 하기만 해도.
mp[0] = 0으로 할당되게 됩니다. 그래서 value에 0이 들어가는 로직에는 사용할 수 없습니다.
map에 ~~한 요소가 있는지를 확인하고 어떠한 로직을 구축하고 싶은데 참조하는 순간 0이 들어가니까요.
코딩 살구클럽 가입 문의
0
36
2
코딩살구클럽 가입문의
0
56
2
3-K private case 질문
0
56
2
안녕하세요. 코딩살구클럽 문의드립니다!
0
70
2
7:41 듣다가 질문합니다
0
63
2
코드 리뷰 요청드립니다!
0
65
2
코딩살구클럽 계정 문의
0
68
2
SK하이닉스 대비 강의수강
0
198
3
코딩살구클럽 등록부탁드립니다.
0
67
2
7-F 재귀로 풀시 런타임애러
0
63
1
1-N 문제 질문입니다. (+ 채점오류)
0
72
2
코딩살구클럽 가입 확인 부탁드립니다.
0
81
2
직장인 코테 합격 공부방법 문의
0
110
2
코딩살구클럽 가입 방법
0
90
2
6-H 체점 관련 질문
0
70
1
채점서버 연결 관련 질문입니다
0
99
2
삼성 s직군
0
84
1
삼성 코테 없어짐
0
194
1
코딩살구클럽 가입부탁드립니다
0
85
2
코딩살구클럽 가입 요청 확인부탁드립니다
0
66
2
5-S 테스트 케이스 질문
0
69
2
코살 문제풀이 환경
0
84
2
2 - T 오큰수 문제가 있는 것 같습니다.
0
74
1
추천 추가문제들
0
69
2





