자바스크립트 함수문제 두개!!
자바스크립트(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+"보다 크거나 작은 수를 입력해주세요.");
}
일단 양수 음수 구별하는 조건문은 잘 작동합니다...만
아까 본 길라잡이에서 세번째 문구가 좀 신경쓰입니다.
- 반환값이 숫자일 경우에만 함수를 실행합니다.
음...제가 코딩한건 함수를 시작해야 숫자인지 아닌지를 구별하는데 말이죠.
한번 숫자와 문자를 구분하는 함수가 있나 검색을 해봤습니다.
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.
이상 함수를 이용한 문제 두개를 풀어보았습니다~!