13일차[while문 / 무한 루프 / 실습 예제]

진하의 메모장·2025년 1월 20일
2

공부일기

목록 보기
15/66
post-thumbnail

2025 / 01 / 20

오늘은 수업 시간에 반복문에 대해 배웠습니다.
while문은 사용하고 무한 루프로 응용하는 문제도 풀었습니다.
반복문에서는 for문이 익숙해서 그런가 약간 헷갈리는 부분이 있었습니다.
헷갈리는 부분은 앞으로 조심할 수 있도록 전체적으로 정리해보겠습니다.



💌 while문

특정 조건이 참일 때 계속해서 반복하는 반복문입니다.
조건이 거짓이 되면 반복문을 종료합니다.

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문을 사용하여 종료할 수 있습니다.


💌 실습 예제(1)

숨겨진 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>


💌 실습 예제(2)

업앤다운 게임

  • 컴퓨터는 1에서 10까지의 숫자중 하나를 고릅니다.
  • 플레이어는 컴퓨터의 숫자를 맞춥니다.
  • 컴퓨터가 선택한 숫자보다 작을 경우 "숫자보다 작습니다" 를 출력합니다.
  • 클 경우 "숫자보다 크다"를 출력합니다.
  • 맞출경우 "정답입니다" 출력합니다.
  • 플레이어에게 총 3번의 기회를 제공합니다.
  • while문 사용 / break 사용 금지

1. 컴퓨터 숫자 지정

컴퓨터는 1에서 10까지의 숫자중 하나를 고릅니다.

  • Math.floor(Math.random( ))을 사용해서 랜덤 난수를 지정해줍니다.
let com = Math.floor(Math.random()*10 + 1);


2. 사용자 변수 선언

컴퓨터의 숫자를 맞추기 위한 사용자 변수를 선언합니다.

  • break를 사용하지 않고 while문을 사용하기 위해 선언만 진행합니다.
  • 입력을 위한 프롬프트는 while문 안에 있습니다.
  • 목숨 카운트를 위한 count 변수를 선언 후 0으로 초기화해줍니다.
let user;
let count = 0;


3. 조건 지정 & 출력

컴퓨터가 선택한 숫자보다 작을 경우 "숫자보다 작습니다" 를 출력합니다.
클 경우 "숫자보다 크다"를 출력 & 맞출경우 "정답입니다" 출력합니다..
플레이어에게 총 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문에 대해 알 수 있었어서 좋았다. °˖✧◝(⁰▿⁰)◜✧˖°
profile
૮꒰ ྀི〃´꒳`〃꒱ა

0개의 댓글