두 수의 차를 구하는 문제였는데 조건 부분에서 막힘. 의외로 간단한건데 기초가 진짜 없다는 생각이 들어서 스스로에게 화남ㅋㅋ 너무 기초적이지만 두번 다시 겪지않기 위해 상기하며 적어봄
Restrictions
50,000 ≤ num1 ≤ 50,000
50,000 ≤ num2 ≤ 50,000
에러코드는 없었으나 함수 내부에 if문과 함께 걸었던 조건문이 먹히지 않는다는걸 알았음.
function solution(num1, num2) {
if (50000 >= num1 >= -50000 && 50000 >= num2 >= -50000) {
const answer = num1 - num2
return answer;
}
}
- 매개변수에 임의의 숫자를 넣어 어느 부분이 잘못 되었는지 확인
> solution(50000, 50000) // 0이 나와서 맞다
> solution(50001, 50000) // 오류가 안나오고 정상적으로 계산되어 1 이 나온다
> solution(50000, 50001) // 오류가 안나오고 정상적으로 계산되어 -1 이 나온다
> solution(50001, 50001) // 오류가 안나오고 정상적으로 계산되어 0 이 나온다
- &&가 문제인가?
function solution(num1, num2) {
if (50000 >= num1 >= -50000) {
if (50000 >= num2 >= -50000) {
const answer = num1 - num2
return answer;
}
}
}
매개변수를 넣어봤지만 아니었다.
- 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
}
}
}
매개변수를 넣었지만 결과는 동일했다.
- 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 만 나온다는 것을 알았다.
- 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이 나와서 맞다
- else의 return이 num1, num2로 나왔으면 좋겠다고 생각해서 solution을 넣어보았음
if (num1 > 3) {
return num1 + num2
} else {
return solution
}
> solution(2, 5) // 조건문이 false 이므로 기댓값과는 다르게 function 이 나온다 생각해보니 당연하다
- solution() 이라고 하면 어떻게 될까?
return solution()
Uncaught RangeError: Maximum call stack size exceeded // 무한콜스택지옥에 빠짐. 함수가 함수 호출을 뫼비우스 띠처럼 돌리니 당연했다
- return 에 아무것도 적지않으면 어떻게 될까?
if (num1 > 3) {
return num1 + num2
} else {
return
}
> solution(2,5) // 막연하게 num1, num2 가 나올거라 생각했는데 undefined 가 나왔다
- 여기서 && 을 추가해보자
if (num1 > 3 && num2 < 5) {
return num1 + num2
} else {
return num1 - num2
}
> solution(4,4) // true 이므로 덧셈이 맞다
> solution(2,4) // false 이므로 뺄셈이 맞다
> solution(24,6) // false 이므로 뺄셈이 맞다
- 결과값에 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' 하나만 나옴
- 숫자 연산을 빼고 불린값만 넣어서 검사하기 쉽게 해야겠다 생각함
if (num1 > 3 && num2 < 5) {
return true
} else {
return false
}
> solution(2,4) // false 이므로 false 가 나와서 맞다
> solution(26,4) // true 이므로 true 가 나와서 맞다
- 다시 원점으로 돌아옴
if ( (num1 >= -50000) && (num2 >= -50000) ) {
if ( (num1 <= 50000) && (num2 <= 50000) ) {
return true
} else {
return false
}
}
> solution(50000, -50000000) // false 이므로 false 가 나와야하지만 undefined 가 나옴.
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) // '둘째 조건이 올바르지않습니다.'
다중 if문에서 return은 마지막에 한번씩만 넣어주면 된다고 생각했었지만 모든 if의 끝마다 return을 넣어주어야한다는 사실을 깨닫고 해결함
스터디원이 처음 코드에 등호를 사용할때 >= 양 옆에 수를 이어붙이기하면 조건이 덮어씌워진다고 이야기해줘서 다시 한번 시험해보니 안됬음.
프로그래머스의 다른 사람들이 푼 풀이를 보고 나도 참고해봤었는데 그 사람들이 잘못됬던거임... 낚였어...