제어문 미션

Onew·2025년 9월 24일
0

js

목록 보기
10/24

제어문 미션 링크

https://codesandbox.io/p/sandbox/5vxpnj

문제 1. [if] 사용자명 미입력 체크
username이 비어있을 때만 경고 문구를 출력하도록 if의 조건식을 채우세요.

const username = "";
if (
빈칸 답
) {
console.log("사용자명을 입력하세요");
}

문제 조건에 맞는 if 조건식은 ✅

!username

입니다.

전체 코드는 이렇게 됩니다:

const username = "";
if (!username) {
  console.log("사용자명을 입력하세요");
}

설명:

  • !usernameusernamefalsy일 때 true가 됩니다.
  • "" (빈 문자열)도 falsy 값이므로, 사용자명이 비어있을 때만 경고 문구가 출력됩니다.

!논리 부정 연산자 (Logical NOT) 입니다.

  • 기본 의미: 값의 참/거짓을 반대로 뒤집습니다.
  • 예시:
console.log(!true);  // false
console.log(!false); // true
console.log(!0);     // true (0은 falsy이므로 !0 → true)
console.log(!123);   // false (0이 아닌 숫자는 truthy이므로 !123 → false)
console.log(!"");    // true (빈 문자열은 falsy이므로 !"" → true)
console.log(!"abc"); // false ("abc"는 truthy이므로 !"abc" → false)

정리하면,

  • !값값이 참이면 false, 거짓이면 true
  • if 조건에서 !username 이면, username이 비어있거나 falsy일 때 조건이 참이 되어 실행됩니다.

문제 2. [if-else] 짝수/홀수 판별
num이 짝수면 even, 아니면 odd가 출력되도록 if의 조건식을 채우세요.

const num = 11;
if (
빈칸 답
) {
console.log("even");
} else {
console.log("odd");
}

문제 조건에 맞는 if 조건식은 ✅

num % 2 === 0

전체 코드는 이렇게 됩니다:

const num = 11;
if (num % 2 === 0) {
  console.log("even");
} else {
  console.log("odd");
}

설명:

  • % 연산자는 나머지 연산자입니다.
  • num % 2 === 0num을 2로 나눴을 때 나머지가 0이면 짝수라는 뜻입니다.
  • 나머지가 0이 아니면 홀수이므로 else 블록이 실행됩니다.

문제 3. [다중조건-1칸] 무더위 조건만 채우기

온도 분기(30 이상 무더위 / 10~29 보통 / 0~9 쌀쌀 / 0 미만 한파)에서 첫 조건(무더위)에 들어갈 식만 채우세요.

const temp = 8;
// 아래 분기에서 첫 조건(무더위)에 들어갈 식만 작성하세요
// 30 이상: 무더위, 10~29: 보통, 0~9: 쌀쌀, 0 미만: 한파
if (temp >= 30) {
  console.log("무더위");
} else if (temp >= 10) {
  console.log("보통");
} else if (temp >= 0) {
  console.log("쌀쌀");
} else {
  console.log("한파");
}

네 ✅ 맞습니다.

  • 첫 조건은 무더위 (30 이상) 이므로 temp >= 30이 정확합니다.
  • 이후 else if 블록에서 범위를 좁혀가면서 조건을 체크하면 됩니다.

즉, 작성하신 코드는 완전히 올바릅니다.

원하면 제가 온도 분기 전체 로직 흐름도 그림처럼 쉽게 정리해 보여드릴 수 있어요. 보여드릴까요?

문제 4. [중첩 if] 비밀번호 길이 체크

pwd가 존재한다면 길이가 8 미만일 때만 '너무 짧음'이 출력되도록 안쪽 if의 조건식을 채우세요.

const pwd = "abc123";
if (!pwd) {
  console.log("비밀번호 없음");
} else {
  if ( 빈칸 답 ) {
    console.log("너무 짧음");
  } else {
    console.log("사용 가능");
  }
}

pwd.length < 8

문제 5. [switch] 교통 신호

각 신호(red/yellow/green)에서 다음 case로 넘어가지 않도록 필요한 제어 구문을 채우세요.

const signal = "yellow";
switch (signal) {
  case "red":
    console.log("정지");

  case "yellow":
    console.log("주의");
    break;
  case "green":
    console.log("진행");
    break;
  default:
    console.log("알 수 없음");
}

빈칸에 들어갈 답은 ✅

break;

전체 코드는 이렇게 됩니다:

const signal = "yellow";
switch (signal) {
  case "red":
    console.log("정지");
    break;       // <- 여기가 빈칸 답
  case "yellow":
    console.log("주의");
    break;
  case "green":
    console.log("진행");
    break;
  default:
    console.log("알 수 없음");
}

설명:

  • switch에서 break를 쓰지 않으면, 조건에 맞는 case 이후의 모든 case가 연속해서 실행됩니다(이를 fall-through라고 부름).
  • 따라서 각 case에서 다른 case로 넘어가지 않도록 break를 넣어야 합니다.

문제 6. [switch] 월→계절 (봄 케이스 채우기)

3~5는 봄입니다. 봄 구간의 누락된 case 값을 채우세요.

const month = 4;
let season = "";
switch (month) {
  case 12:
  case 1:
  case 2:
    season = "겨울"; break;
  case: [빈칸답]
  case 4:
  case 5:
    season = "봄"; break;
  case 6:
  case 7:
  case 8:
    season = "여름"; break;
  default:
    season = "가을";
}
console.log(season);

3(ㅇ)

문제 7. [삼항] 로그인 메시지

isLoggedIn이 false일 때 "로그인이 필요합니다"이 출력 될 수 있도록 작성하세요.

const isLoggedIn = false;
const msg = isLoggedIn ? "환영합니다" : "           ";
console.log(msg);

"로그인이 필요합니다"(ㅇ)

빈칸에 들어갈 답은 ✅

"로그인이 필요합니다"

전체 코드는 이렇게 됩니다:

const isLoggedIn = false;
const msg = isLoggedIn ? "환영합니다" : "로그인이 필요합니다";
console.log(msg); // "로그인이 필요합니다"

설명:

  • 삼항 연산자 조건 ? 참일 때 값 : 거짓일 때 값 형태입니다.
  • isLoggedInfalse이므로 거짓일 때 값"로그인이 필요합니다"msg에 할당됩니다.

문제 8. [배송비 조건] 경계값 처리

50000 이상은 무료, 30000~49999는 2500원, 그 외는 3000원이 되도록 else if 조건식을 채우세요.

const price = 42000;
let fee = "";
if (price >= 50000) {
  fee = "무료배송";
} else if () {
  fee = "배송비 2500원";
} else {
  fee = "배송비 3000원";
}
console.log(fee);

작성하신 else if 조건식에는 오류가 있습니다 ❌

price <= 30000 && price < 50000
  • 이렇게 하면 30,000 이하만 조건에 들어가고 30,001~49,999는 포함되지 않습니다.
  • 30,000 이상 50,000 미만을 체크하려면 price >= 30000 && price < 50000 으로 해야 합니다.

올바른 전체 코드는:

const price = 42000;
let fee = "";

if (price >= 50000) {
  fee = "무료배송";
} else if (price >= 30000 && price < 50000) {
  fee = "배송비 2500원";
} else {
  fee = "배송비 3000원";
}

console.log(fee); // "배송비 2500원"

✅ 정리:

  • 무료배송: price >= 50000
  • 2500원: price >= 30000 && price < 50000
  • 나머지: 3000원

문제 9. [while] 3회 출력 조건

'학습중...'이 정확히 3번 출력되도록 while의 조건식을 채우세요.

let i = 0;
while () {
  console.log("학습중...");
  i++;
}

빈칸에 들어갈 답은 ✅

i < 3

전체 코드는 이렇게 됩니다:

let i = 0;
while (i < 3) {
  console.log("학습중...");
  i++;
}

설명:

  • i를 0부터 시작하여 1씩 증가시키면서 조건 i < 3이 참일 동안 반복됩니다.
  • 따라서 "학습중..."정확히 3번 출력됩니다.

문제 10. [while] 카운트다운

n이 5에서 1까지 출력되도록 while의 조건식을 채우세요.

let n = 5;
while () {
  console.log(n);
  n--;
}

맞아요 ✅ 그대로 정답입니다.

  • i < 3 조건으로 반복하면 i = 0, 1, 2일 때만 반복되어 "학습중..."가 3번 출력됩니다.
  • i++를 꼭 넣어야 무한 루프가 발생하지 않습니다.

문제 11. [for] 3의 배수 출력 (1~15)

1부터 15까지 중 3의 배수만 출력되도록 if의 조건식을 채우세요.

for (let k = 1; k <= 15; k++) {
  if () {
    console.log(k);
  }
}

빈칸에 들어갈 답은 ✅

k % 3 === 0

전체 코드는 이렇게 됩니다:

for (let k = 1; k <= 15; k++) {
  if (k % 3 === 0) {
    console.log(k);
  }
}

설명:

  • % 연산자는 나머지를 구합니다.
  • k % 3 === 0k를 3으로 나눈 나머지가 0이면 3의 배수라는 뜻입니다.
  • 따라서 3, 6, 9, 12, 15가 출력됩니다.

문제 12. [문자열 순회] 각 문자 출력

word의 각 문자를 한 줄에 하나씩 출력하도록 출력 식을 채우세요.

const word = "mango";
for (let x = 0; x < word.length; x++) {
  console.log( 빈칸 답 );
}

지금 작성하신 코드에서는 word.length를 출력하고 있어서 "5"만 반복 출력됩니다 ❌

각 문자를 출력하려면 인덱스로 접근해야 합니다.

빈칸에 들어갈 답은 ✅

word[x]

전체 코드는 이렇게 됩니다:

const word = "mango";
for (let x = 0; x < word.length; x++) {
  console.log(word[x]);
}

설명:

  • word[x] → 문자열 wordx번째 문자
  • x = 0~4일 때 m, a, n, g, o가 한 줄씩 출력됩니다.

문제 13. [누적 합] 1~10 합

sum에 1부터 10까지 누적되도록 for 블록 안의 한 줄을 채우세요.

let sum = 0;
for (let t = 1; t <= 10; t++) {
   [빈칸답]
}
console.log(sum);

지금 작성하신 t++반복 인덱스 증가용이라서 누적 합과는 관련이 없습니다 ❌

for 블록 안에서 sum에 누적하려면 한 줄은 ✅

sum += t;

전체 코드는 이렇게 됩니다:

let sum = 0;
for (let t = 1; t <= 10; t++) {
  sum += t;
}
console.log(sum); // 55

설명:

  • sum += tsum = sum + t
  • 1~10까지 더하면 최종적으로 55가 출력됩니다.

+=복합 대입 연산자 (Addition Assignment Operator) 입니다.

  • 의미: a += ba = a + b 와 동일
  • 기존 값에 새로운 값을 더해서 다시 변수에 할당할 때 사용합니다.

예시:

let x = 5;
x += 3;   // x = x + 3
console.log(x); // 8

let sum = 0;
for (let i = 1; i <= 5; i++) {
  sum += i;  // sum = sum + i
}
console.log(sum); // 15
  • =, =, /=, %= 도 비슷하게 연산 후 대입 하는 용도로 사용됩니다.

문제 14. [중첩 반복] 별 계단 (증감식 채우기)

각 줄 번호 r만큼 별이 찍히도록 안쪽 for의 조건식을 채우세요.

for (let r = 1; r <= 4; r++) {
  let stars = "";
  for (let c = 1;; c++) {
    stars += "*";
  }
  console.log(stars);
}

빈칸에 들어갈 답은 ✅

c <= r

전체 코드는 이렇게 됩니다:

for (let r = 1; r <= 4; r++) {
  let stars = "";
  for (let c = 1; c <= r; c++) {
    stars += "*";
  }
  console.log(stars);
}

설명:

  • 외부 반복 r은 줄 번호를 나타냅니다 (1~4).
  • 내부 반복 c는 각 줄에서 별을 찍는 횟수입니다.
  • c <= r 조건으로 각 줄 번호만큼 별이 출력됩니다.

결과:

*
**
***
****

문제 15. [break] 첫 9의 배수

1부터 증가하며 처음 만나는 9의 배수를 출력한 뒤 반복을 즉시 종료하도록 빈칸을 채우세요.

for (let i = 1; i <= 100; i++) {
  if (i % 9 === 0) {
    console.log(i);
     break;
  }
}

작성하신 코드 ✅ 완전히 맞습니다.

  • i % 9 === 0 → 9의 배수 체크
  • console.log(i) → 처음 만나는 9의 배수 출력
  • break; → 반복문 즉시 종료

결과:

for (let i = 1; i <= 100; i++) {
  if (i % 9 === 0) {
    console.log(i); // 9
    break;
  }
}
  • 출력: 9
  • 첫 번째 9의 배수만 출력되고 반복이 종료됩니다.

문제 16. [continue] 1~30 합(4의 배수 제외)

4의 배수는 더하지 않도록 해당 회차를 건너뛰는 제어 구문을 채우세요.

let total = 0;
for (let i = 1; i <= 30; i++) {
  if (i % 4 === 0) {

  }
  total += i;
}
console.log(total);

작성하신 코드 ✅ 완전히 맞습니다.

  • i % 4 === 0 → 4의 배수 체크
  • continue; → 4의 배수일 경우 해당 회차 건너뛰기
  • 나머지 수만 total에 누적

결과:

let total = 0;
for (let i = 1; i <= 30; i++) {
  if (i % 4 === 0) {
    continue;
  }
  total += i;
}
console.log(total); // 336
  • 1~30 중 4,8,12,16,20,24,28 제외한 합이 계산됩니다.
💡

제어문 설명

조건문

  • if: 조건이 true일 때 코드 블럭 실행
  • if - else if - else: 순서대로 검사, 처음 true가 되는 분기만 실행
  • switch: 일치하는 case에서 실행 시작, 보통 각 case 끝에 break;
  • 삼항 연산자조건 ? 값1 : 값2

반복문

  • while: 조건이 true인 동안 반복
  • for(초기식; 조건식; 증감식) 형태로 횟수 제어

반복 제어

  • break: 현재 반복 즉시 종료
  • continue: 이번 회차의 나머지 코드 건너뛰고 다음 반복으로 이동

0개의 댓글