티스토리 뷰
문제 설명
정수 num이 짝수일 경우 "Even"을 반환하고 홀수인 경우 "Odd"를 반환하는 함수, solution을 완성해주세요.
제한 조건
-num은 int 범위의 정수입니다.
-0은 짝수입니다.
문제 풀이 과정
- 짝수, 홀수를 보자마자 어제 공부했던 코딩 테스트-짝수의 합이 생각났다. %를 이용해 나머지가 0이면 짝수, 아니면 홀수라고 정의했었지. 짝수의 합 풀이를 참고해 solution 함수를 작성했다.
- 작성하기 전에 제한 조건 중 'int 범위의 정수'라는 말이 뭔지 모르겠어서 구글링을 해 보았다.

-2^31≤ num ≤ 2^31로 표현하면 될 것 같다. ^연산자를 코딩에서 쓰는지는 모르겠어서 지피티한테 한번 물어봤다.

자바스크립트에서 2^31을 표현하려면 'Math.pow(2, 31)'을 사용하여 2의 31승을 계산한다고 한다.
if (num >= -Math.pow(2,31) && num <= Math.pow(2,31))
로 하면 될 것 같다.. 고 생각했는데, 지피티가 얘기해준 상한값은 Math.pow(2,31)에 1을 뺀 값이었다. 이건 또 뭐지?

들어도 모르겠다. 최댓값은 정해져 있는데 0이 있건 말건 뭔 상관이란 말인가? 구글링을 계속 해도 모르겠어서 챗지피티가 답변한 내용을 찬찬히 다시 봤다.

여기서 나의 치명적인 실수를 깨달았다. 최댓값은 애초부터 2^31이 아니라 2^31-1이었던 것이다..! 그냥 int의 범위가 그런 것이다!! 그리고 왜 이런 범위가 나오는지도 다시 보며 숙지했다. 2^31개의 숫자를 표현할 수 있는데, 0이 포함되면 당연히 2^31 -1이 최댓값이 되겠지.
그렇다면
function solution(num) {
if (num < -Math.pow(2, 31) && num > Math.pow(2,31) -1) {
return "입력 값이 제한사항을 벗어났습니다.";}
else { if (num%2=0){
return "Even"} if (num===0) { return "Even" } else { return "Odd" };
}
라고 코드를 작성해보았다. 하지만 실패. 뭔가 오류가 났다. 뭐가 오류가 났을까 보다가 세미콜론(;)이 잘못된 것 같아 수정하고 싶었는데, 정확히 어떤 경우에 세미콜론을 붙이는지 모르겠어서 지피티한테 물어봤다.
세미콜론을 사용하는 규칙
1. 각 명령문(statement)의 끝에
2. 복합 구문(여러 개의 명령문을 블록({})안에 묶어서 사용하는 것. 블록 자체는 세미콜론을 필요로 하지 않지만, 블록 안의 개별 명령문은 세미콜론을 사용한다.)
3. for 루프의 초기화, 조건, 증감 부분
4. 함수 선언 후 바로 실행(IIFE)
- 자동으로 세미콜론을 넣어 주기에 굳이 사용하지 않아도 된다는 의견이 있으나, 예외적인 경우가 발생할 수 있기도 하고 그거 넣는거 뭐 어렵다고.. 싶기도 하고, 나는 초심자이기 때문에 익숙해지기 전까진 굳이 생략하지 않는 게 좋을 것 같아 세미콜론을 붙이기로 했다. 위의 규칙에 따라 세미콜론을 사용하면,
function solution(num) {
if (num < -Math.pow(2, 31) && num > Math.pow(2,31) -1); {
return "입력 값이 제한사항을 벗어났습니다."}
else { if (num%2=0);{
return "Even"};
if (num===0);
{ return "Even" };
else { return "Odd" };
}
이렇게 된다. 코드를 넣어 실행해 보면,
안된다!
이제 좀 화가 나기 시작한다. 챗지피티 도와줘~~~~

답변을 보니까 뭐가 틀렸는지 보인다.당연하겠지만.
1. '&&'는 and, 동시에 두 조건이 참일 때만 참이므로 or 인 '||'를 써야 한다.
2. 조건문 끝에 세미콜론을 사용하면 안 된다. 여기서 조건문은 if 구문을 의미한다. if ( - ){ } 일 때 if (-); 를 넣어버리면 조건문이 끝난 것으로 간주된다고 한다. 오 당연한 얘기 같음.
3. 비교 연산자가 틀렸다! '='대신 '==='를 사용해야 한다. 이건 알고 있었는데 틀려서 아쉽다.

위 사항을 고치고(몇 번 수정했다), 중괄호가 안 들어가 있는 점, 코드 줄 바꿈 등 고쳤다. 최종 코드.
function solution(num) {
if (num < -Math.pow(2, 31) || num > Math.pow(2,31) -1) {
return "입력 값이 제한사항을 벗어났습니다.";}
else { if (num%2===0){
return "Even";}
if (num===0){
return "Even";
} else {
return "Odd";
}
}
}
잘 돌아간다!
다른 사람의 코드를 좀 봤는데, 문제가 개편되었다고 해서 코드 참고는 다음에 하기로.
오늘도 뿌듯한 코드카타였다~~
'스파르타 > 알고리즘 코드카타' 카테고리의 다른 글
코딩 테스트 - 가운데 글자 가져오기 (0) | 2024.08.02 |
---|---|
코딩 테스트 - 수박수박수박수박수박수? (0) | 2024.08.01 |
코딩 테스트 - 배열의 평균값 (0) | 2024.07.10 |
코딩 테스트-짝수의 합 (1) | 2024.07.10 |
코딩 테스트 - 각도기 (0) | 2024.07.08 |