이전 학습 내용

오늘의 배움 코드를 쓰는 줄이 중요하다.

SigLee0505 2022. 11. 25. 02:39
        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분정도 썼던것 같다. 찾아서 고치고 난 후 현자타임이 심하게 온것은 안비밀

 

뭔가 이 글은 부끄러워서 올릴까 한참을 고민했다.

하지만 다시는 안하겠다는 생각에 이글을 올려본다..