public static int change(int k) {
// TODO:
int num;
int tmp;
int[] arr = {500,100,50,10,5,1};
int count = 0;
for(int i = 0 ; i < arr.length ; i++){
if(k / arr[i] > 0){
k = k % arr[i];
count = count + k / arr[i];
}
}
return count;
}
위의 코드는 아주 기초적이고 멍청한 실수를 하나 하고 있다.
요즘 초등학생부터 코딩을 가르친다라는 뉴스 기사를 본적이 있다.
위의 코드는 코딩을 살짝이라도 배웠던 초등학생이라면 원하는대로 작동하지 않을 것이라는 것을 확신 할 수 있다.
물론 코드를 메서드만 딸랑 때왔기 때문에 잘 이해할 수 없을 수도 있지만
코드에서 이상하다는 것을 못느낀다면 우리 모두열심히 해야할 것이다.
위의 코드는 원하는대로 절대 작동 할 수가 없다
k = k % arr[i];
count = count + k / arr[i];
if 문에 있는 코드를 보자
뭔가 보이는가??
그렇다!!!
int로 특정 수가 입력 되면 최소한의 교환 횟수를 알아보는 로직인 것같은데
저기에 보면 어리석은 개발자가 k에다 k를 배열로 나눈 나머지를 저장한 후
k를 arr[i] 로 나눠서 count에 넣는 것이다
근데 여기서 k값이 생각했던 값이 들어갔을까?
절대 아니다
k는 바로 윗줄에서 k의 값을 배열로 나눈 나머지로 바꿨다.
그렇기에 이 코드는 정말 바보같은 코딩이라고 생각한다.
그렇다면 옳게 된 코드는 ?
간단하나 위 아래를 바꿔주면 바로 해결 할 수 있다.!!!
참고로 나도 이거 찾는데 10분정도 썼던것 같다. 찾아서 고치고 난 후 현자타임이 심하게 온것은 안비밀
뭔가 이 글은 부끄러워서 올릴까 한참을 고민했다.
하지만 다시는 안하겠다는 생각에 이글을 올려본다..
'이전 학습 내용' 카테고리의 다른 글
| NPE (0) | 2022.11.29 |
|---|---|
| 당신이 넣은 값이 이상하게 마지막 반복 결과로 바뀐다면>?(얕은복사 깊은복사) (0) | 2022.11.27 |
| 오늘의소소한 고민 getName이 오류가 뜬 이유는? (0) | 2022.11.23 |
| Thread 임계 구역 설정의 중요성( 동기화) (0) | 2022.11.23 |
| Iterator 사용 시 주의 사항(toNext()) (0) | 2022.11.17 |