일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 다시풀기
- 컴퓨터비전
- 프로그래머스
- 파이썬
- androidstudio
- level1
- 대학원
- SWEA
- java
- SQL
- 대학원일기
- LEVEL2
- Github
- BFS
- 어렵다
- build
- level4
- 휴학
- Matrix Factorization
- 컨트리뷰톤
- D3
- Python
- git
- 자바
- 안드로이드스튜디오
- level3
- 내휴학생활중의아주큰일
- WebOS
- MSBuild
- py
- Today
- Total
bit가 눈 앞에서 왔다갔다
Max-Priority Queue - 잘못된 인덱스 넘김 본문
알고리즘 과제하면서 나는 내가 좋아하는 인덱스 실수를 또 저질렀다... ._.
그래도 이번엔 마음을 잘 지키며! 나쁜 생각 안 하고! 스스로! 끝끝내! 몇 시간 만에! 잘못된 걸 찾아냈다!
이렇게 에러 찾아서 해결했으니까 점차 점차 같은 실수 줄이고 스스로도 자신감도 더 생기겠지..!
경험이라고 생각하고 작성한다.
상황
-Max-Priority Queue를 구현하는 상황
-클래스 배열을 선언함
-교재에서 root를 인덱스 1번부터 시작한 상황이었다. 클래스 배열도 +1 되어 선언된 상태, 모든 반복문도 인덱스 1이 기준
ex)
in >> length;
INFO = new info[length + 1]; //책에서 인덱스 [1]부터 시작
string name = "";
int stnum = 0;
int score;
for (int i = 1; i <= length; i++) {
in >> name;
in >> stnum;
in >> score;
INFO[i] = info(name, stnum, score);
}
문제상황
문제가 되는 부분은 Max-Heap-Insert함수였다..
void MaxHeapInsert(int key) { //key가 쓰레기값이 넘어옴
heapsize += 1; //전역변수- key insert마다 늘어남
INFO[heapsize].setscore(-100);
HeapIncreaseKey(heapsize, key);
}
key 값이 쓰레기 값이 넘어오는데, 이렇게 되어 버리니까 그다음 함수인 Heap-Increase-Key에서 에러 문이 계속 뜨는 것이었다,,
void HeapIncreaseKey(int i, int key) {
if (key < INFO[i].getscore()) {/////
cout << "error : new key is smaller than current key"<<endl;
}
INFO[i].setscore(key);
while (i > 1 && INFO[parent(i)].getscore() < INFO[i].getscore()){
swap(INFO[i], INFO[parent(i)]);
i = parent(i);
}
}
-100으로 초기화한 것보다 -897362 이런 식으로 떠버리는 쓰레기 값이 훨씬 작은 게 당연하니 에러 문이 뜨지 않는 것이 이상하지..
해결시도
처음엔 처음에 값 대입이나 초기화가 잘 되지 않은 것이라고 생각했다.
그래서 (1)class에서 비워둔 디폴트 생성자에 굳이! 초기 화문을 넣어주기도 했고
(2)입력받기 직전에 선언했던 변수들을 초기화해보기도..
그런데 안됐다..!
디버깅을 해보면 해볼수록 초기화 문제가 아니었다.
초기화해도 쓰레기 값이 나오니까!!))
처음부터 다시 보자는 마음으로 main함수에서 key값을 넘기는 부분을 다시 살펴보았다.
for (int i = 0; i < length; i++) {
int temp = INFO[i].getscore();
MaxHeapInsert(temp);
}
(3)전혀 상관없지만 혹시나 하는 마음으로 temp를 만들어서 temp를 넘겨줬다.
그러다가 갑자기 문뜩 (4)인덱스를 살펴보게 되었고....
i=1 to length가 정상인데... i=0 to length로 해놓은 것을;;;발견했다...
해결
for (int i = 1; i <= length; i++) { //설마 인덷ㄱ스
MaxHeapInsert(INFO[i].getscore());
}
맞아 인덱스야...
정신 차리고 이렇게 하니까 결과도 제대로 나왔다!
인덱스 문제는 작년부터 주변한테 많은 지적을 받아왔다...
특히 멘토님한테 이걸로 많이 말을 들었었는데... ._. 감자로 맞는 단 말도 동방에서 뛰어다닌 것도 다 이거 때문
항상 에러 뜨면 스스로 자괴감이 너무 많이 들고 힘들다.
정말 더러운.. 떨칠 수 없는 끈적끈적한 무언가가 솟아져 나와 심장을 쥐어잡는 듯한 느낌...?
그러면 정말 아무것도 할 수가 없고 기분이 너무 안 좋아진다....
어쩌면 지금 자신감이 많이 낮아지고 나는 도움 없이는 문제 해결을 못하는 건가? 하는 자존심 상하고 우울한 느낌도 이런 것들이 쌓여서 일지도 모른다. (거의 백퍼)
도움받아서 문제 해결하고 보면 사실 다 이런 것들이다. 인덱스 문제.
그래도 이렇게 스스로 하나씩 해결하고! 내 문제를 다시 발견해 냈으니까!
우울한 학습 효과 위에 좀 더 긍정적인 학습 효과가 쌓일 거얌
인덱스 조금만 더 신경 쓰자~~~~
'언어! > 피드백' 카테고리의 다른 글
deque 사용하면서 리스트 차원 틀림 (0) | 2022.02.04 |
---|---|
JAVA) 인덱스 확인 (0) | 2021.05.03 |
반복문 조건식 논리연산자 (0) | 2021.04.29 |
ifstream 관련 - 초기화 안함 (1) | 2019.11.05 |