230214_TIL

reggias·2023년 2월 14일
0

I learned

목록 보기
38/62

두 수의 차를 구하는 문제였는데 조건 부분에서 막힘. 의외로 간단한건데 기초가 진짜 없다는 생각이 들어서 스스로에게 화남ㅋㅋ 너무 기초적이지만 두번 다시 겪지않기 위해 상기하며 적어봄

Q. 정수 num1과 num2가 주어질 때, num1에서 num2를 뺀 값을 return하도록 soltuion 함수를 완성해주세요.

Restrictions

50,000 ≤ num1 ≤ 50,000
50,000 ≤ num2 ≤ 50,000

What was the problem

에러코드는 없었으나 함수 내부에 if문과 함께 걸었던 조건문이 먹히지 않는다는걸 알았음.

Things i tried

All code

function solution(num1, num2) {
    if (50000 >= num1 >= -50000 && 50000 >= num2 >= -50000) {
        const answer = num1 - num2
        return answer;
    } 
}
  1. 매개변수에 임의의 숫자를 넣어 어느 부분이 잘못 되었는지 확인
> solution(50000, 50000) // 0이 나와서 맞다
> solution(50001, 50000) // 오류가 안나오고 정상적으로 계산되어 1 이 나온다
> solution(50000, 50001) // 오류가 안나오고 정상적으로 계산되어 -1 이 나온다
> solution(50001, 50001) // 오류가 안나오고 정상적으로 계산되어 0 이 나온다
  1. &&가 문제인가?
function solution(num1, num2) {
    if (50000 >= num1 >= -50000) {
        if (50000 >= num2 >= -50000) {
            const answer = num1 - num2
            return answer;
        }
    } 
}

매개변수를 넣어봤지만 아니었다.

  1. else가 없기 때문일까? if문에 else가 없는 경우를 프로젝트 내에 코드에서 종종 봐서 없어도 되는줄알았는데..
function solution(num1, num2) {
    if (50000 >= num1 >= -50000) {
        if (50000 >= num2 >= -50000) {
            const answer = num1 - num2
            return answer;
        } else {
            return num1, num2
        }
    } 
}

매개변수를 넣었지만 결과는 동일했다.

  1. 50000이라는 숫자가 너무 커서 간단한 if문을 만들어보기로 했음.
function solution(num1, num2) {
    if (num1 > 3) {
        return num1 + num2
    } else {
        return num1, num2
    }
}

> solution(4, 3) // 조건문이 true 이므로 7이 나와서 맞다
> solution(2, 4) // 조건문이 false 이므로 기댓값은 2, 4 였지만 4 가 나와서 return num1, num2 이라고 적으면 num2 만 나온다는 것을 알았다.
  1. else의 return문을 두 수의 차로 수정해서 , 가 아닌 숫자 연산자를 넣어 결과값이 하나로 나오게 했음
function solution(num1, num2) {
    if (num1 > 3) {
        return num1 + num2
    } else {
        return num1 - num2
    }
}

> solution(4, 3) // 조건문이 true 이므로 7이 나와서 맞다
> solution(2,5) // 조건문이 false 이므로 -3이 나와서 맞다
  1. else의 return이 num1, num2로 나왔으면 좋겠다고 생각해서 solution을 넣어보았음
if (num1 > 3) {
  return num1 + num2
} else {
  return solution
}

> solution(2, 5) // 조건문이 false 이므로 기댓값과는 다르게 function 이 나온다 생각해보니 당연하다
  1. solution() 이라고 하면 어떻게 될까?
return solution()

Uncaught RangeError: Maximum call stack size exceeded // 무한콜스택지옥에 빠짐. 함수가 함수 호출을 뫼비우스 띠처럼 돌리니 당연했다
  1. return 에 아무것도 적지않으면 어떻게 될까?
if (num1 > 3) {
  return num1 + num2
} else {
  return
}

> solution(2,5) // 막연하게 num1, num2 가 나올거라 생각했는데 undefined 가 나왔다
  1. 여기서 && 을 추가해보자
if (num1 > 3 && num2 < 5) {
  return num1 + num2
} else {
  return num1 - num2
}

> solution(4,4) // true 이므로 덧셈이 맞다
> solution(2,4) // false 이므로 뺄셈이 맞다
> solution(24,6) // false 이므로 뺄셈이 맞다
  1. 결과값에 true or false 가 같이 나오면 좋겠다고 생각해서 return문을 바꿈
if (num1 > 3 && num2 < 5) {
      return num1 + num2, "true"
  } else {
      return num1 - num2, "false"
  }

> solution(4,4) // 8, true 이 나올줄 알았는데 'true' 하나만 나옴
> solution(2,4) // -2, false 이 나올줄 알았는데 'false' 하나만 나옴
  1. 숫자 연산을 빼고 불린값만 넣어서 검사하기 쉽게 해야겠다 생각함
if (num1 > 3 && num2 < 5) {
    return true
} else {
    return false
}

> solution(2,4) // false 이므로 false 가 나와서 맞다
> solution(26,4) // true 이므로 true 가 나와서 맞다
  1. 다시 원점으로 돌아옴
if ( (num1 >= -50000) && (num2 >= -50000) ) {
    if ( (num1 <= 50000) && (num2 <= 50000) ) {
        return true
    } else {
        return false
    }
}

> solution(50000, -50000000) // false 이므로 false 가 나와야하지만 undefined 가 나옴.

how did you solve it?

function solution(num1, num2) {
    if ( (num1>=-50000) && (num2>=-50000) ) {
        if ( (num1<=50000) && (num2<=50000) ) {
            const sub = num1 - num2
            return sub;
        } else {
            return "둘째 조건이 올바르지않습니다."
        }
    } else {
        return "처음 조건이 올바르지않습니다."
    }
}

> solution(50000, 50000) // 0
> solution(-50001, 50000) // '처음 조건이 올바르지않습니다.'
> solution(50000, 50001) // '둘째 조건이 올바르지않습니다.'

What new did you learn?

다중 if문에서 return은 마지막에 한번씩만 넣어주면 된다고 생각했었지만 모든 if의 끝마다 return을 넣어주어야한다는 사실을 깨닫고 해결함

On a lighter note

스터디원이 처음 코드에 등호를 사용할때 >= 양 옆에 수를 이어붙이기하면 조건이 덮어씌워진다고 이야기해줘서 다시 한번 시험해보니 안됬음.
프로그래머스의 다른 사람들이 푼 풀이를 보고 나도 참고해봤었는데 그 사람들이 잘못됬던거임... 낚였어...

profile
sparkle

0개의 댓글