2025 / 01 / 20
오늘은 수업 시간에 반복문에 대해 배웠습니다.
while문은 사용하고 무한 루프로 응용하는 문제도 풀었습니다.
반복문에서는 for문이 익숙해서 그런가 약간 헷갈리는 부분이 있었습니다.
헷갈리는 부분은 앞으로 조심할 수 있도록 전체적으로 정리해보겠습니다.
특정 조건이 참일 때 계속해서 반복하는 반복문입니다.
조건이 거짓이 되면 반복문을 종료합니다.while (조건) { // 조건이 참일 때 실행될 코드 }
while문을 사용해서 간단한 문제를 풀어보았습니다.
let i = 0; // 변수 초기화 필수 while (i < 5) { console.log(i); // i 값을 출력 i++; // i 값 1 증가 }
- 처음에 i가 0이므로 조건 i < 5가 참입니다.
- 반복문이 실행되면서 i가 1씩 증가하고, i가 5가 될 때까지 출력됩니다.
- i가 5가 되면 조건이 거짓이 되어 반복문을 종료합니다.
조건이 항상 참이어서 반복문이 끝나지 않는 상황을 말합니다.
건이 절대로 거짓이 되지 않기 때문에 반복문이 끝나지 않고 계속 실행됩니다.while (true) { console.log("이 코드는 무한히 실행됩니다!"); }
- true는 항상 참이므로, while문 안의 코드는 계속해서 반복 실행됩니다.
- 이 코드는 종료되지 않으며, 실행을 중단하려면 수동으로 프로그램을 멈춰야 합니다.
원치 않게 프로그램을 멈추지 않게 만들어서 시스템 자원을 낭비할 수 있습니다.
무한루프는 break문을 사용하여 의도적으로 종료시킵니다.let count = 0; while (true) { console.log(count); count++; if (count >= 5) { break; // count가 5 이상이면 반복문 종료 } }
- count가 0에서 시작하고, count가 5 이상되면 break문이 실행되어 반복문을 종료합니다.
- while문은 조건이 참일 때 반복 실행하는 구문입니다.
- 무한루프는 조건이 항상 참일 때 반복문이 끝나지 않는 상태입니다.
- 무한루프를 사용할 때는 반드시 종료 조건을 고려해야 하며, 필요 시 break문을 사용하여 종료할 수 있습니다.
숨겨진 X 찾기
- 사용자에게 행과 열 번호를 입력받습니다.
- 시스템은 랜덤으로 X의 위치를 지정합니다.
- X를 찾으면 "찾았습니다" 라는 문구를 출력합니다.
- X를 찾지 못하면 찾을 때까지 반복문(while)을 실행합니다.
<script>
const line1 = ["o", "o", "o"];
const line2 = ["o", "o", "o"];
const line3 = ["o", "o", "o"];
const grid = [line1, line2, line3];
let row = Math.floor(Math.random()*3);
let cols = Math.floor(Math.random()*3);
grid[row][cols] = "x";
while(true){
let row_Answer = Number(prompt("찾고 싶은 행의 인덱스를 작성해주세요!"));
let cols_Answer = Number(prompt("찾고 싶은 열의 인덱스를 작성해주세요!"));
if(row_Answer >= 0 && row_Answer < 3 && cols_Answer >= 0 && cols_Answer < 3){
if(grid[row_Answer][cols_Answer] == "x"){
document.write(`x를 찾았습니다. <br>`);
break;
}else{
alert(`x를 찾지 못했습니다.`);
}
}else{
alert("다시 입력해주세요!");
}
}
document.write(`x의 위치는 [${row}][${cols}]입니다.`);
</script>
업앤다운 게임
- 컴퓨터는 1에서 10까지의 숫자중 하나를 고릅니다.
- 플레이어는 컴퓨터의 숫자를 맞춥니다.
- 컴퓨터가 선택한 숫자보다 작을 경우 "숫자보다 작습니다" 를 출력합니다.
- 클 경우 "숫자보다 크다"를 출력합니다.
- 맞출경우 "정답입니다" 출력합니다.
- 플레이어에게 총 3번의 기회를 제공합니다.
- while문 사용 / break 사용 금지
컴퓨터는 1에서 10까지의 숫자중 하나를 고릅니다.
- Math.floor(Math.random( ))을 사용해서 랜덤 난수를 지정해줍니다.
let com = Math.floor(Math.random()*10 + 1);
컴퓨터의 숫자를 맞추기 위한 사용자 변수를 선언합니다.
- break를 사용하지 않고 while문을 사용하기 위해 선언만 진행합니다.
- 입력을 위한 프롬프트는 while문 안에 있습니다.
- 목숨 카운트를 위한 count 변수를 선언 후 0으로 초기화해줍니다.
let user; let count = 0;
컴퓨터가 선택한 숫자보다 작을 경우 "숫자보다 작습니다" 를 출력합니다.
클 경우 "숫자보다 크다"를 출력 & 맞출경우 "정답입니다" 출력합니다..
플레이어에게 총 3번의 기회를 제공합니다.
- if문을 사용해 해당 조건을 작성해줍니다.
- while문 안에 작성하여 반복을 돌리고, 조건을 false롤 지정하여 해당 조건 달성 시 코드 블록을 빠져나올 수 있도록 작성해줍니다.
- document.write( )를 사용하여 컴퓨터의 랜덤 숫자가 무엇인지 출력합니다.
while(com !== user && count != 3){ user = Number(prompt("숫자를 입력해주세요! [1 ~ 10] 기회는 3번")); if(com > user){ alert("com의 숫자보다 작습니다."); count++; }else if (com < user){ alert("com의 숫자보다 큽니다."); count++; }else{ alert("정답입니다."); } if(count === 3){ alert("기회가 없습니다."); } } document.write(`컴퓨터의 랜덤 숫자 : ${com}`);
- 위에 작성한 코드의 전체 코드입니다.
<script>
let com = Math.floor(Math.random()*10 + 1);
let user;
let count = 0;
while(com !== user && count != 3){
user = Number(prompt("숫자를 입력해주세요! [1 ~ 10] 기회는 3번"));
if(com > user){
alert("com의 숫자보다 작습니다.");
count++;
}else if (com < user){
alert("com의 숫자보다 큽니다.");
count++;
}else{
alert("정답입니다.");
}
if(count === 3){
alert("기회가 없습니다.");
}
}
document.write(`컴퓨터의 랜덤 숫자 : ${com}`);
</script>
13일차 후기
- while문을 true를 사용해서 무한 루프를 돌려서 사용해봤지만 조건을 거짓을 사용해 break를 사용하지 않고도 코드 블록을 빠져나올 수 있다는 것을 알 수 있었다.
- 원래 알고 있는 반복문이지만 오늘 while에 대해 더 자세히 알 수 있었다.
- 평소에 for문을 많이 사용해서 while문은 좀 미숙한 것 같다.
- 실습 예제를 통해 while문에 대해 알 수 있었어서 좋았다. °˖✧◝(⁰▿⁰)◜✧˖°