JAVASCRIPT

자바스크립트 조건문 문제 두개!

김도현2 2023. 2. 25. 12:18
반응형

자바스크립트 (JavaScript) 책에 있는 문제 두가지를 풀어보겠습니다.

     

문제-1번

문서에는 배열이 주어져 있습니다. 이 배열에서 10보다 큰 값을 찾아서 화면에 표시해보세요.

  • 배열 요소의 개수만큼 for 문을 반복합니다.
  • if 문을 사용해서 요소의 값과 10을 비교합니다.
  • document.write 문을 사용해서 화면에 표시합니다.

 

까지가 문제의 내용이네요.

한번 천천히 풀어봅시다.

 

먼저 배열 요소의 개수만큼 for문을 반복 시켜보라네요.

배열의 갯수를 구하는 arr.length 문을 사용하면 될거같아요.

 

 

{
    const arr = [1, 3, 5, 7, 9, 11, 13, 15, 17 ,19];

    for(let i=0; i<=arr.length; i++){
        document.write(arr[i]);
    }
}

//결과값: 135791113151719undifined

 

배열값이 잘 나오는걸 볼수있습니다.

 

근데 어라?? 결과값에 undefined가 뜨는게 보이네요??

이 원인은 for문 안에 조건식에 i<=arr.length; 이 써져있죠.

 

이 뜻은,

조건: i가 배열 갯수보다 같거나 작을때까지 동작.

이란 뜻인데 여기서 ' = '  이 등호가 문제인겁니다.

for문의 반복되는 동작을 풀이해보자면

 

document.write(arr[0]);		//i=0
document.write(arr[1]);		//i=1
document.write(arr[2]);		//i=2
document.write(arr[3]);		//i=3
document.write(arr[4]);		//i=4
document.write(arr[5]);		//i=5
document.write(arr[6]);		//i=6
document.write(arr[7]);		//i=7
document.write(arr[8]);		//i=8
document.write(arr[9]);		//i=9
document.write(arr[10]);	//i=10
document.write(arr[11]);	//i=11
//false

//arr.length = 10

우리가 필요한 출력값은 document.write(arr[10]); 까지가 필요한겁니다.

arr[11]번의 출력값은 원하지 않는거였죠.

즉 배열에 존재하지 않는 arr[11] 의 값까지 불러와서 undifined가 뜨는겁니다.

조건식에서 i<=arr.length; = (등호) 를 빼서 i<arr.length; 로 만들어준다면

document.write(arr[10]) 이후로 i(10)<10 조건에 맞지않아 for문은 false가 되어 동작을 멈출것입니다!

그러면 우리가 원하는 출력값을 얻을 수 있겠죠?

 

자 다음은 if문을 이용해서 요소의 값과 10을 비교하라네요. 

즉 10보다 작으면 출력이 안되게끔 써보면 될거같아요.

한번 해보겠습니다.

 

 

 

const arr = [1, 3, 5, 7, 9, 11, 13, 15, 17 ,19];

for(let i=0; i<=arr.length; i++){
    if(arr[i] > 10){
        document.write(arr[i] + " ");
    }
}

//결과: 11 13 15 17 19

 음! 조건문이 잘 작동하는거 같습니다. 

출력값에 " " 쌍따옴표 안에 스페이스바를 넣어 보기에 편하게 값마다 사이를 벌려줬습니다.

한번 문제와 똑같이 나오게끔 해보자면,

 

 

 

 

const arr = [1, 3, 5, 7, 9, 11, 13, 15, 17 ,19];

document.write("<span style='font-size: 35px; font-weight:bold'>"+"10보다 큰 숫자 찾기"+"</span>"+"<br>");
document.write("주어진 배열: "+"[" + arr + "]" + "<br><br>");
document.write("결과 :")

for(let i=0; i<=arr.length; i++){
    if(arr[i] > 10){
        document.write(arr[i] + " ");
    }
}

이렇게 문제지와 똑같은 결과값을 내봤습니다~ 

자! 다음 문제를 한번 봅시다.

 

 

 

 

 

문제-2번

사용자에게 1보다 큰 수를 입력하게 한 후 입력한 숫자까지 짝수만 더하는 프로그램을 작성해 보세요.

  • 사용자가 입력한 숫자가 null이 아니고 1보다 클 경우에만 실행됩니다.
  • 입력한 숫자까지 반복하면 현재 숫자가 홀수인지, 짝수인지 구별합니다(숫자를 2로 나누어 나머지가 1이면 홀수, 아니면 짝수)
  • 홀이면 화면에 표시하는 명령을 건너뛰고 작수일 경우에만 현재 값과 더한값을 표시합니다.

 

 

 

이야.. 이번 문제는 좀 까다롭네요. 한번 힘내보겠습니다.

 

일단 크게 제가 생각하는 코드의 뼈대를 구성해보자면 

 

 

promt(값을 입력받아와)

삼항(입력받은게 숫자? yes or no){

        for(입력받은 숫자의 짝수만 뽑아){

             if(홀수는 무시조건){

                 어쩌고저쩌고

             }      
	짝수 더하고 출력
        }   

  }

 

 

 

이런 구조로 한번 만들기 시도해보겠습니다.

 

 

 

 

let user = prompt("2이상 숫자를 입력해주세요.");
let start = 0;

start = (user > 1) ? start=2 : document.write("1보다 큰 숫자를 입력해주세요.");

if(start==2){
    document.write("성공")
}
                
//문자열, 1이하의 숫자 : 1보다 큰 숫자를 입력해주세요.
//2이상의 숫자 : 성공

 

일단 1이하의 숫자나 문자열같은걸 넣으면 false가 뜨도록 코딩을 해봤습니다.

 

 

false : 0, null, undefined, false, ""(빈문자열)
true : 0을 제외한 숫자, "문자열", [배열], {객체}, true

이걸 배웠으니 한번 이용해 봅시다.

false는 0, true는 1이라는 숫자를 가지게됩니다.

문자열 또한 true, 즉 문자열도 1이라는 소리니까 위에 조건에선 false쪽으로 가게됩니다.

 

2이상 숫자를 쓰니 성공이 잘뜨는 모습입니다. 

 

이제 여기서 숫자입력창에서 입력 받은 숫자(user)를 1부터 받은숫자까지 나열을 해야합니다.

왜냐? 숫자들을 나열해 짝수들만 골라 뽑아와야 하기때문입니다.

 

 

 

 

let user = prompt("2이상 숫자를 입력해주세요.");
let start = 0;

start = (user > 1) ? start=2 : document.write("1보다 큰 숫자를 입력해주세요.");

if(start==2){
    for(let i=1; i<=user; i++){
    }
}

숫자를 1부터 ~ 입력받은 숫자까지 나열해야 하기때문에 for문을 이용해 줍니다.

이제 여기서 if문을 사용해 짝수를 뽑아오면 되겠죠?

 

 

 

 

 

 

let user = prompt("2이상 숫자를 입력해주세요.");
let start = 0;
let num = 0;

start = (user > 1) ? start=2 : document.write("1보다 큰 숫자를 입력해주세요.");

if(start==2){
    for(let i=1; i<=user; i++){
        if(i % 2 == 0){
        
        }
    }
}

음.. 짝수만 건져오는 코드를 적었는데 여기서 무언가의 이상함을 감지했습니다.

짝수만 걸러내서 작동하는 코드인데 뭐 어쩌자는거지..? 

어떻게 출력을 표현할까를 고민하며 검색해봤습니다..

 

 

 

 

 

 

let user = prompt("2이상 숫자를 입력해주세요.");
let start = 0;
let num = 0;

start = (user > 1) ? start=2 : document.write("1보다 큰 숫자를 입력해주세요.");

if(start==2){
    for(let i=1; i<=user; i++){
        if(i % 2 == 0){
            num += i;
    }
}

아!! 짝수를 뽑아내서 따로 저장할수 있는 변수를 만들면 되는구나!!!

숙제를 하면서 또 공부가 되는 자바스크립트 였습니다.

 

이제 if문을 나가서 for문 안에다가 출력만 하면 됩니다.

 

 

 

 

 

let user = prompt("2이상 숫자를 입력해주세요.");
let start = 0;
let num = 0;

start = (user > 1) ? start=2 : document.write("1보다 큰 숫자를 입력해주세요.");

if(start==2){
    for(let i=1; i<=user; i++){
        if(i % 2 == 0){
            num += i;

        } document.write(i + "----" + num + "<br>");
    }
}

어라.... 이제 또 무언가가 복잡해질려 합니다.

이 홀수놈들을 어떻게 빼내지?

 

 

 

 

 

 

 

let user = prompt("2이상 숫자를 입력해주세요.");
let start = 0;
let num = 0;

start = (user > 1) ? start=2 : document.write("1보다 큰 숫자를 입력해주세요.");

if(start==2){
    for(let i=1; i<=user; i++){
        if(i % 2 == 0){
            num += i;

        } if(i % 2 == 0){
            document.write(i + "----" + num + "<br>");
        }
    }
}

생각해보니 또 if(조건문)를 쓰면 되잖아..?

다행히 짝수들만 나와 작동이 잘 된다는걸 확인했습니다..

코드가 이상하게 길어진 느낌도 있긴하지만 직접(검색 도움을 받았지만) 짜냈다는거에 만족합니다..!   

 

 

 

 

 

이상 자바스크립트 문제 두개를 풀어봤습니다!!

어렵지만 재미있게 해본거같습니다.