[리뉴얼] 렛츠기릿 자바스크립트
교재 : https://thebook.io/080270/part01/ch02/05/
반복문(while)
- 반복작업을 잘 시켜야 효율적인 프로그래밍 !
- 무한 반복으로 하면 컴퓨터 뻗는다잉 -> 무한 반복되는 상황을 방지해야함
- 실수로 웹브라우저에서 무한 반복 실행해버렸다면? 새 탭 켜고 기존 탭은 종료.
while (조건식) {
실행문1;
실행문2;
실행문3;
}
▶ 조건식이 true동안 실행문 반복해서 실행함.
- [퀴즈]hello, world! 100번만 반복하기
내 답)
let i = 1
while (i<=100) {
i = i + 1;
console.log ('Hello world!')
}
쌤 답)
let i = 1;
while (i <= 100) {
console.log('Hello, while!');
i++;
}
- i=i +1 / i+=1 / i++ 같다고 생각하면 됨.(엄밀히는 다르지만..)
헐 대박
let i = 1
while (i<=100) {
console.log ('Hello world!')
i = i + 1;
}
하니까 100번 실행하고 101이라는 결과값 돌려줌
- 프로그래밍할 때는 i의 초기값을 0을 주로 설정함. 이 경우 위의 예제에서 조건식을 i<=99 나 i<100으로 바꿔야겠지?
반복문(for)
for (시작; 조건식; 종료식)
실행문;
- 실행순서 : 시작 > 조건식 > 동작문 > 종료식 > 조건식 > 동작문 > 종료식 > ... > 조건식이 참인동안 계속 반복
- for문의 반복문 요소들은 생략이 가능해서
> for (;;) {
}
도 가능하지만, 이 경우 항상 true이기 때문에 무한 반복됨;
while문과 for문 비교
- while문 : 반복문 요소들(시작, 조건식, 종료식)이 흩어져있어서 조건식&종료식 사이의 코드가 길어지면 가독성이 떨어짐. 더 편한 경우도 있음!
- for문 : 처음에 반복문 요소들을 한번에 모아서 명시하기 때문에 가독성 좋음.
- [퀴즈] 1~100까지 출력해보기
쉽게 가면
for (i=1;i<=100;i++){
console.log(i)
}
지만
정석대로는
for (i=0;i<100;i++){
console.log(i+1);
}
프로그래머들은 반복문 작성하면서 i가 어떻게 변하는지 머릿속으로 자연스레 생각함. 초보자 단계에서는 눈으로만 따라가지 말고 직접 노트에 i가 변하는 걸 써보면서 진짜 사고 방식을 따라할 수 있게 노력해야함! 중요!
break와 continue
- 반복문 노트에 적어보는 습관!
for (let i=0;i<100;i=i+2){
console.log(i+1);
}
//i==0, i+1==1
//i==2, i+1==3
//i==4, i+1==5
//i==98, i+1==99
//i==100? 조건 false 끝
이런 식으로 적어보는 거임!
break문
- 자연수, 실수 전체를 대상으로 반복문 돌려서 값을 하나씩 찾다가 원하는 값 찾으면 반복문 멈출 때.
let i = 0;
while (true) {
if (i === 5) break;
i++;
}
console.log(i);
// i==0, i++==1
// i==1, i++==2
// i==2, i++==3
// i==3, i++==4
// i==5 break, 5
- break를 이용하여 무한반복문을 실행할 때는 while문을 써주는걸 추천. for문을 무한반복으로 쓰려면 조건식이 빈값이어서 좀 ..어색하니까? 반면에 while문에서는 조건을 (true)라고 해주면 됨. 사실 웬만하면 무한반복문을 쓰지 않는데, 무한반복문이 보인다? 그럼 어딘가에 break가 들어가있을 가능성이 큼!
let i = 0;
while (true) {
console.log(i);
i++;
}
for (let i = 0; ; i++) {
console.log(i);
}
continue문
- 반복문이 특정 조건에서만 실행되게. continue문이 실행되면 그 후의 실행문은 실행되지 않음.
let i = 0;
while (i < 10) { //홀수만 console.log
i++;
if (i % 2 === 0) { // 짝수만
continue;
}
console.log(i);
}
// i==0, i%2===0
// i==1, i%2===1, 1
// i==2, i%2===0
// i==3, i%2===1, 3
// i==9, 1%2===1, 9
// i==10, 조건 깨짐
- 주석 다는 습관! 며칠전에 짠 코드도 내가 왜 이렇게 짰는지 모르겠을때 얼마나 답답하겠뉘!
중첩 반복문
- for 반복문 순서에 유의해서 손으로 메모해보자
for (let i = 0; i < 5; i++) {
if (i % 2 === 0) continue;
for (let j = 0; j < 5; j++) {
if (j % 2 === 0) continue;
for (let k = 0; k < 5; k++) {
if (k % 2 === 0) continue;
console.log(i, j, k);
}
}
}
- 결과 노트에 손으로 메모해봤는데 확실히 이해가 잘 됨! 굿! 심심할 때 폰 게임말고 노트에 끄적여보자
- [퀴즈]7 구구단을 출력하되, 결과에 짝수가 하나도 나오지 않게 해 보세요. continue 문을 사용하세요.
내 답) 홀리 몰리.. 개뿌듯..
for (let i=0;i<10;i++){
if (i%2===0) continue;
for (let j=0;j<10;j++){
if(j%2===0) continue;
console.log(i*j);
}
}
책 정답)
for (let i = 0; i < 10; i++) {
for (let j = 0; j < 10; j++) {
if (i % 2 === 0 || j % 2 === 0) continue;
console.log(i, '*', j, '=', i * j);
}
}
continue 없는 버전)
for (let i = 1; i < 10; i=i+2) {
for (let j = 1; j < 10; j=j+2) {
console.log(i, '*', j, '=', i * j);
}
}
별찍기 숙제
Q1.
for (let i=0;i<5;i++){
console.log('*'.repeat(i+1));
}
- 문자열.repeat(숫자) -> 문자열을 숫자만큼 반복
Q2.
for (let i=5;i>0;i=i-1){
console.log('*'.repeat(i));
}
또다른 정답 (i=0 이 정석!)
for (let i=0;i<5;i++){
console.log(5-i);
}
Q3.
for (i=0;i<10;i++){
if (i%2===0) continue;
console.log('*'.repeat(i));
}
Q4.
for (i=0;i<10;i++){
if (i%2===0)continue;
console.log('*'.repeat(10-i));
}
Q5.
for (i=0;i<5;i++) {
console.log(' '.repeat(i),'*'.repeat(5-i));
}
Q6.
for (i=0;i<5;i++) {
console.log(' '.repeat(5-i),'*'.repeat(i+1));
}
Q7.
for (i=0;i<10;i++){
if (i%2===0) continue;
console.log(' '.repeat((9-i)/2),'*'.repeat(i));
}
for (let i=0;i<10;i++){
if (i%2===0)
console.log(' '.repeat((8-i)/2),'*'.repeat(i+1));
}
마지막 어려웠다... 2번째 짝수기준으로 생각한게 더 편하다.
'인프런 > Java Script' 카테고리의 다른 글
22.03.04 조건문 if(else, else if, swith) / 조건부 연산자(삼항연산자) (0) | 2022.03.05 |
---|---|
22.03.03 Java Script 자료형, 변수 (0) | 2022.03.05 |
22.02.09 변수와 기본 자료형 / 나이계산 프로그램, 글자색 바꾸기, 시간표시 예제 (0) | 2022.02.10 |