티스토리 뷰

문제 설명

 정수 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. 비교 연산자가 틀렸다! '='대신 '==='를 사용해야 한다. 이건 알고 있었는데 틀려서 아쉽다. 

숙지 숙지. if 와 for 구문에는 세미콜론 사용하지 않기.

위 사항을 고치고(몇 번 수정했다), 중괄호가 안 들어가 있는 점, 코드 줄 바꿈 등 고쳤다. 최종 코드.

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"; 
        }
    }
}

잘 돌아간다! 

 

다른 사람의 코드를 좀 봤는데, 문제가 개편되었다고 해서 코드 참고는 다음에 하기로.

오늘도 뿌듯한 코드카타였다~~

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
글 보관함