JAVASCRIPT

자바스크립트 함수문제 두개!!

김도현2 2023. 2. 28. 20:13
반응형

자바스크립트(JavaScript) 문제 두가지

 

문제. 1

사용자가 프롬프트 창에 숫자를 입력했을 때 그 숫자를 함수로 넘겨주고, 함수에서는 숫자가 양수인지,

음수인지, 또는 0인지 판단해서 알림 창에 보여 주는 프로그램을 작성해 보세요.

길라잡이

  • 숫자를 받아서 양수, 음수, 0을 판단하고 알림 창에 표시하는 함수를 선언합니다.
  • parseInt( ) 함수를 사용해 프롬프트 창에 입력한 내용을 숫자로 변환합니다.(프롬프트 창에 입력한 내용이 숫자가 아니면 parseInt( )함수는 NaN을 반환합니다)
  • 반환값이 숫자일 경우에만 함수를 실행합니다.

 

 

 

1번 문제는 무난하게 풀거같습니다!

 

먼저 양수는 0보다 큰 숫자, 음수는 0보다 작은 숫자, 그리고 0을 따로 표시할수 있는 함수.

 

 

 

let user = prompt("숫자를 입력해 주세요.");

 

먼저 prompt 를 이용해서 사용자에게 값을 받아올 수 있습니다.

prompt 함수의 경우, 입력 받은 값이 숫자인지 문자인지 상관없이 string(문자열) 타입으로 입력됩니다.

 

parseInt( ) 이 함수는 처음 보는데 문제를 읽어보니 문자열숫자를 숫자열로 바꿔주는 함수라고 하네요!! 

신기해라.

 

 

let user = prompt("숫자를 입력해 주세요.");

function func(user){
    user 값을 받고 parseInt()함수로 숫자열로 변환
    변환한 값을 func(user)함수로 리턴
}
if문으로 양수,음수,0 따지기

 

이런 뼈대로 한번 짜보겠습니다.

 

 

 

 

 

let user = prompt("숫자를 입력해 주세요.");

function func(user){
    let a =  parseInt(user);
    return a;
}

 

parseInt( ) 함수를 이렇게 사용하는게 맞나...?

여튼 값을 넣어보면 출력이 되긴하니 작동은 하는게 맞는거같습니다.

 

숫자를 입력하면 user에 저장이 됩니다. 그 후 함수안에서 user값(문자열)을 숫자열로 변환을 해주는 함수를 작동해주고 

리턴을 하여 숫자열로 변환된 user 값을 조건문에 사용하여 출력을 할겁니다~

 

그럼 이제 조건문을 넣어 양수,음수,0을 따져보겠습니다.

 

 

let user = prompt("숫자를 입력해 주세요.");

function func(user){
    let a =  parseInt(user);
    return a;
}
let num = func(user);
if(num>0){
    document.write(num+"은(는) 양수 입니다!");           
} else if(num<0){
    document.write(num+"은(는) 음수 입니다!"); 
} else{
    document.write(num+"보다 크거나 작은 수를 입력해주세요.");
}

 

일단 양수 음수 구별하는 조건문은 잘 작동합니다...만 

아까 본 길라잡이에서 세번째 문구가 좀 신경쓰입니다.

 

  • 반환값이 숫자일 경우에만 함수를 실행합니다.

 

음...제가 코딩한건 함수를 시작해야 숫자인지 아닌지를 구별하는데 말이죠.

한번 숫자와 문자를 구분하는 함수가 있나 검색을 해봤습니다.

isNaN( ) 란 함수를 찾았습니다!!!
매개변수가 숫자인지 검사하는 함수랍니다.
(NaN은 Not a Number) 즉 숫자가 아니면 true, 숫자열이든 문자열이든 숫자면 false 가 뜨는 
엄청난 함수를 찾았습니다.
 
 
이걸 사용해서.

See the Pen Untitled by ehcjswo (@ehcjswo) on CodePen.

let user = prompt("양수,음수를 구별하는 함수입니다.");
let str = isNaN(user);

if(str == false){
    function func(user){
    let a =  parseInt(user);
    return a;
    }
    let num = func(user);
    if(num>0){
        document.write(num+"은(는) 양수 입니다!");           
    } else if(num<0){
        document.write(num+"은(는) 음수 입니다!"); 
    } else{
        document.write(num+"보다 크거나 작은 수를 입력해주세요.");
    }
} else {
    document.write("숫자만 입력해!!");
}

 

자 이렇게 작성해보면 사용자 입력창에 숫자가 안들어가면 함수를 시작 못하게끔 만들어봤습니다.

길라잡이에 써있는 parseInt( ) 함수를 function함수 안에 넣어버려서 결과값NaN을 활용을 못해봤지만  완수는 했기에 만족합니다.

 

자 다음

 

 

 


 

 

문제 2번

2개의 숫자를 입력받아 두 수의 최대공약수를 구하는 함수를 작성하고 테스트해 보세요. 예를 들어 4와 12의 최대공약수는 4가 됩니다. 즉, 두 수 모두 나누어떨어지는 수 중에서 가장 큰 값이 최대공약수입니다.

길라잡이

  • 주어진 두 수 중에서 어떤 수가 큰 수인지 확인합니다.
  • 두 수가 모두 나누어떨어져야 하므로 두 수 중에서 큰 수까지 반복하면서 작은 수도 나누어떨어지고, 큰 수도 나누어 떨어지는 숫자를 찾습니다.
  • 찾을 때마다 변수에 할당합니다. 반복이 모두 끝나면 변수에는 가장 마지막에 할당된 약수만 남습니다.

 

 

음.. 최대 공약수라... 오랜만에 보는 수학이네요.

 

한번 까먹은 최대공약수의 정의를 한번 알아봅시다!!

 

최대공약수란? 

공약수는 두 개이상의 자연수의 공통된 약수입니다. 공약수 중에서 제일 큰 공약수를 최대공약수라 부르고 있습니다!

예를들어,

 

10의 약수: 1,2,5,10

20의 약수: 1,2,4,5,10,20

두 수의 공통된 공약수는 1,2,5,10 이고, 최대 공약수는 제일 큰 공약수인 10인걸 알수 있습니다.

 자 그럼 문제를 풀어볼까요?

 

 

prompt 로 두개의 숫자를 받아 user에 저장
user 값을 숫자열로 변환 (큰수,작은수를 구별하는 함수를 사용하기위해)
최대공약수는 두개의 user 값을 큰숫자%작은숫자로 나눌수 있어야 값을 구할수있으니 구별

function(){
	최대공약수를 구하는 함수
}
 출력

이런 뼈대로 만들어보겠습니다.

 

 

 

let user1 = prompt("첫번째 숫자를 입력해 주세요.");
let user2 = prompt("두번째 숫자를 입력해 주세요.");

let num1 =  parseInt(user1);		 //parseInt : 문자열을 숫자열로 변환
let num2 =  parseInt(user2);

let max = Math.max(num1, num2);  	 //Math.max : 숫자중 큰 값을 가져간다.
let min = Math.min(num1, num2);		 //Math.min : 숫자중 작은 값을 가져간다.

 

일단 사용자에게 값을 받고, 문자열인 숫자를 계산할수 있게 숫자열로 변환하여

큰값과 작은값을 max, min에 각각저장합니다.

이렇게 해야 최대공약수를 구하는 식에 사용이 가능합니다.

 

 

 

 

let user1 = prompt("첫번째 숫자를 입력해 주세요.");
let user2 = prompt("두번째 숫자를 입력해 주세요.");

let num1 =  parseInt(user1);
let num2 =  parseInt(user2);

let max = Math.max(num1, num2);
let min = Math.min(num1, num2);

function func(a, b){ 
    const ans = (max, min) => max % min === 0 ? min : ans(min, max % min);
    return ans(max, min);  
}
document.write(func(max, min));

//큰수(max)를 작은수(min)로 계속 나누어 나온 '나머지' 값으로 작은수(min)를 나누는 작업을 반복합니다.
//그렇게 나머지가 0이 되는순간 나온 값이 '최대공약수'입니다.

삼항을 이용하여 큰값과 작은값을 나누어 나머지가 0이 될때까지 반복하는 작업을 해줍니다.

 

예를 들어 사용자 숫자를 35,20을 대입해보고 함수안에 상황을 풀어보면,

 

const ans = (35, 20) => 35 % 20 === 0 ? 20 : ans(20, 35 % 20);
	       //max  min   max  min  나머지 min     min  max min
           나머지가 15이니 false. ans( ) 함수에 다시 리턴.
           false 값 ans(20, 35 % 20); 
           처음 20이 max자리, 35 % 20 min 자리로 리턴
           
const ans = (20, 15) => 20 % 15 === 0 ? 15 : ans(15, 20 % 15);
	//(리턴전 min값, 나머지값) 	삼항 값이 또 false니 반복.
    
const ans = (15, 5) => 15 % 5 === 0 ? 5 : ans(5, 15 % 5);
    //15나누기 5의 나머지값은 0. 즉 true가 되니 false의 반복은 중지.

이렇게 마지막 min 값은 5가 되니 최대공약수값은 5입니다!

 

 

 

 

 

See the Pen Untitled by ehcjswo (@ehcjswo) on CodePen.

 

 

이상 함수를 이용한 문제 두개를 풀어보았습니다~!