'JS'에서 Prompt로 받으면 String으로 받아진다.
<문자열로 받아지는 이유> |
∴ 어떤 종류의 데이터가 입력될지 확정할 수 없기 때문에 일관성을 유지하기 위해 입력값을 문자열로 받는다. |
1. javascript는 동적언어 |
2. 변수의 데이터 타입을 런타임(runtime) 시에 결정됨 (JS는 코드가 실행될 때 데이터타입이 정해짐) |
>> 따라서 prompt 문자를 숫자로 변환하고 싶을경우 parseInt() 및 *1을 사용 |
[문제1]
- prompt에 num1과 num2를 입력받고, 연산자 sth을 입력받아서 계산하자.
※ 참고로 prompt는 string type만 받을 수 있다.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<script>
let num1 = prompt("첫 번째 숫자를 입력해주세요")*1;
let sth = prompt("연산자 '+', '-', '*', '/', '%' 중 하나를 입력해주세요") //연산자 --> 기호화
let num2 = parseInt(prompt("두 번째 숫자를 입력해주세요"));
let result;
if (sth == "+") {
result = num1 + num2;
} else if(sth == "-") {
result = num1 - num2;
} else if(sth == "*") {
result = num1 * num2;
} else if (sth == "/") {
result = num1 / num2;
} else {
result = num1 % num2;
}
console.log("계산 값: " + result);
</script>
</body>
</html>
∴ 연산자를 직접 호출할 수 없기 때문에, if 조건문을 활용하여 출력하였다.
JavaScript에서는 문자열로 입력받은 연산자를 직접 연산에 사용할 수 없기 때문에, 조건문을 사용하여 해당 연산을 수행 |
[문제 2]
- prompt에 '분', '초'를 입력받아서 원하는 시간까지 돌릴 수 있도록 설정
- 만약 값을 나가지 않는다면 59분 59초를 Max로 한다.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<script>
let minutes = 59;
let seconds = 59;
let myMinutes = prompt("분을 입력하세요") * 1;
let mySeconds = prompt("초를 입력하세요") * 1;
for (let i=0; i<= minutes; i++) {
if (i == myMinutes) {
for (let j=0; j <= mySeconds ; j++) {
console.log(i + "분" + j + "초");
}
break;
}
for (let j=0; j <= seconds ; j++) {
console.log(i + "분" + j + "초");
}
}
</script>
</body>
</html>
<풀이과정>
1. 이중 포문을 통해 59분 59초를 만듬
2. prompt로 전달받은 값을 활용할 수 있도록 대입
3. 'i' 즉 먼저 minutes의 최대값을 만들 수 있도록 설정
4. 'if'문에서 하기처럼 단순히 break만 걸었다면 '17'을 입력하면 '17'이후의 값이 콘솔창에 뜨지 않았을 것
for (let i=0; i<= minutes; i++) { //기본 59까지 도는 것
if(i == myMinutes) {
break;
}
}
5. 따라서 if 구문이 끝날 시점에 출력 값을 기재
6. 원하는 초가 나올때까지 for loop를 모두 돌아야 함, 즉 59까지 찍을 수 있어야 함
7. 하기처럼 'j'를 설정할경우 0 ~ mySeconds까지의 값만 반복하게 되는 문제가 발생
for (let j=0; j <= seconds ; j++) {
if (j == mySeconds) {
break;
}
console.log(i + "분" + j + "초");
}
8. 따라서 'j'가 들어있는 기존 for문은 유지해야한다고 판단
9. 일련의 과정에 따라 4번 부분을 응용하게 됨
10. 즉 원하는 i와 j값을 출력하기 위해선 0부터 j까지 루프를 돌려야 한다고 판단
11. 최종적으로 if 구문안에서 원하는 값을 이루고, 출력함 (이중 포문을 통해)
if (i == myMinutes) {
for (let j=0; j <= mySeconds ; j++) {
console.log(i + "분" + j + "초");
}
break;
}
728x90
'JS > [문제해결]' 카테고리의 다른 글
[국비] 배열 및 반복문(for)과 이벤트 위임 결합_삭제 버튼 (0) | 2024.05.26 |
---|---|
[국비] 배열 및 반복문(for문)_체크 박스 동기화 (0) | 2024.05.25 |
[국비] for문 활용_문자열 누적 (0) | 2024.05.25 |