JS/[문제해결]

[국비] 조건문(if/else if) 및 반복문(for)문 활용_prompt 연산자, 분/초 출력

줌인. 2024. 5. 20. 23:01

 

'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