DAY_006[국비] 자바 웹프로그래밍 과정

Bona의 블로그 입니다.·2022년 10월 4일
0

국비과정

목록 보기
7/99

 ⛅ Day 006 : 다양한 이중 반복문 연습 

  • for문 안에 for문을 넣는 이중 반복문을 다양한 형태로 연습했다.
  • 또 다른 반복문 While문을 배우고 for문으로 썼던 코드를 while문으로도 작성해보았다.



 🌴 1 교시 

 🎯 연습 문제 : 입력 받은 정수들의 합계 & 평균 출력하기 

  • 10개의 정수를 입력받아 그들의 합계와 평균을 출력
    10개를 입력하는 중간에 종료를 원하면 0을 입력하여 입력을 종료하고
    최종 합계, 평균을 출력

    < 입력 양식 >
    입력 1 : XX
    입력 2 : XX
    입력 3 : XX
    ...
    입력 10 : XX

    <출력 양식 >
    입력한 정수들의 합계 : XXX
    입력한 정수들의 평균 : xx.xx

  • 고칠 점

  • 버그(?!) 고치기
    처음부터 0을 입력하면, 평균이 NaN으로 나옴
    ⇒ sum = 0일 때 합계는 0, 평균은 0.0으로 출력 되도록 코드 추가하기



 🌴 2 교시 

 🎯 연습 문제 : 1부터 입력받은 정수까지 짝수의 합을 출력 

  • 정수를 하나를 입력 받아서 1부터 입력받은 정수까지 짝수의 합을 출력한다.

  • 각각의 짝수들이 합산 되었을 때의 중간 합계를 모두 출력하고 최종 합계를 마지막에 출력

  • 문제코드 ⬇️

  • 내가 쓴 답

    < 출력한 화면 (빨간색은 입력 받은 데이터) >
    정수를 입력하세요 : 13
    + 2 = 2
    + 4 = 6
    + 6 = 12
    + 8 = 20
    + 10 = 30
    + 12 = 42
    1부터 13 까지 짝수의 합계 : 42

  • 다른 방법 (2가지)

    1. for문 안에 if를 넣지 않고 i를 2부터 시작 + 2씩 증가하는 조건을 달아도 됨
      for(int i=2 ; i<=num ; i+=2)
    2. continue; 사용하는 방법

 🎯 연습문제 : 공약수 전부 출력 

  • 입력받은 두 개의 정수의 공약수들을 출력하세요
    예) 12, 36을 입력한 경우 1 2 3 4 6 12
    공약수 (두 개의 숫자 모두 나눠떨어지는 숫자)

  • 주어진 코드 ⬇️

  • 내가 작성한 답

  • 고칠 점
    if(num1 > num2)로 쓰면 되는 걸 굳이 계산할 필요가 없었다.



 🌴 3 교시 

 🎯 연습문제 : 구구단 출력 

  • 이중 반복문을 이용해서 구구단 1단부터 9단까지 출력하기
    한 개의 단이 출력 되는 방향은 세로이든 가로이든 상관 없음

  • 내가 쓴 답

  • 1단씩 세로로 출력됨 → 한 줄에 1~5단 / 6~9단을 이어서 출력하기
    강사님의 코드를 따라서 써보고 출력해봄
  • 각 단은 세로로, 1~5단 / 6~9단이 출력 되었음
    폰트 때문에 이클립스에서는 줄이 안맞는 것처럼 보여서 명령프롬프트로 실행하였음
    컴파일 하려는데 갑자기 javac가 안되어서 시스템 환경변수를 수정함.
    (시스템환경변수의 문제였다. 원래는 전체 시스템 변수에만 추가했는데 내가 쓰고 있는 계정에도 path를 추가하니 실행되었음)



 🌴 4 교시 

 🎯 연습문제 : 다양한 이중 반복문들 

  1. <원하는 출력 화면>
    #
    ##

    #########
    ##########

    • 변수 k를 만들어서 바깥의 for문의 실행코드에 k++;를 넣고 안쪽 for문의 조건에 j<=k를 넣는 방법도 있음
  2. 위의 모양에서 뒤집힌 모양으로 출력하려면 (# 10개 → 1개 까지)

    • 변수 k를 만들어서 (반복문 밖에서) k=11로 대입한 후 바깥쪽 반복문 실행코드에 k--;를, 안쪽 for문의 조건에 j<=k-i;를 넣는 방법도 있다.
  3. <원하는 출력 화면>
    ##########
      #########
             …
                  ##
                    #

  • #이 점점 줄어드는데 앞이 공백이고 공백이 점점 늘어나도록
  1. <원하는 출력 화면>
                     #
                   ##
                    …
       #########
      ##########
  • #이 점점 늘어나는데 앞이 공백이고 공백이 점점 늘어나도록



 🌴 5 교시 

 🎯 연습문제 : 다양한 이중 반복문들 2 

  1. #이 이등변 삼각형 처럼 출력되게 해보기
  • #이 한 줄에 1,3,5 ... 19개가 출력하되 가운데 정렬되어 출력모양이 이등변 삼각형 처럼 보이게 출력하기
  • 이 문제는 강사님과 같이 코드를 써보면서 진행하였다.
    헷갈려서 출력래보고 한참을 들여다보면서 이해했다.
  1. 입력 받은 숫자가 소수인지 아닌지 출력하기 ⬇️
  • 1부터 입력 받은 숫자까지 쭉~ %연산을 해서 0이되면(=약수가 있으면) count가 올라간다.
    => 즉, count가 2이면 1과 자신만 약수라는 뜻이므로 소수 !!!
  1. 1~100 중에서 소수인 숫자 전부 출력하기
    • 위의 코드에서 연산 횟수를 줄여보자!
    • 수정한 부분
      k=2; k<i/2; if(i%k == 0) (count == 0)
    • 왜 연산 횟수를 줄이려는 노력을 해야 하는지?
      ⇒ 서버 과부하 방지를 위해서, 이런 불필요한 연산들이 많아질 수록 애플리케이션의 속도가 느려진다.



 🌴 6 교시 

  • 1주차 시험



 🌴 7 교시 

 🔖 While 반복문 

  • for반복문은 정해진 횟수의 반복을 괄호 안에 미리 정의 해놓고 반복하는 특징이 있다.

  • while문은 정해지지 않은 횟수의 반복을 처리하는데 주로 사용한다.
    특정 조건이 만족하지 않을 때까지 무한 수행
    while(true) { } -> 이 반복문은 종료되지 않는다(무한 반복)

    
    int a=1;
    while (a<=10) { 
    // for문과 달리 ()안에 다른 건 다 빼고, 반복을 계속할 조건만 쓴다.
    System.out.println("while : "+ a);
    a++;
    }
    
    // 위와 아래는 같은 코드
    a=0;
    while(true) {
    	System.out.printf("while : "+a);
    	a++;
    	if(a>10) break;
    }
    System.out.println();
  • 괄호 안의 관계(비교)연산식의 참/거짓 유무를 먼저 판단한 후 반복을 계속할 지 결정 한다.

  • while문의 경우 위에서 코딩한 것처럼 a++;명령에 의해 반복유지 유무가 결정되는 것보다는 특정 조건에 의해 순서와 반복횟수에 상관없이 반복이 결정되는 상황에 더 적절히 사용된다.

  • for문의 ()의 3가지 조건을 전부 쓰지 않아도 된다?

  • 위의 코드 모두 정상 실행되는 코드임

  • 사용자가 0을 입력해서 종료시킬 때까지 반복해서 입력 받기 ⬇️

 🎯 연습문제 : While문 익숙해지기 

  1. 짝수 출력
  • 1~100까지의 수 중에서 짝수만 출력하기

  1. while문으로 팩터리얼 만들기 ⬇️
    • 정수를 입력 받아서 입력된 정수의 팩터리얼을 출력

  • 위의 출력화면에서 숫자가 6부터 1까지 역순으로 나열되도록 출력해보기



 🌴 8 교시 

 🎯 연습문제 : “출력할 구구단의 단을 입력하세요”의 반복 

  • 사용자에게 단을 입력받아 구구단을 출력합니다.
    출력할 단을 계속 입력 받고 입력 받은 단의 구구단을 출력합니다.
    0을 입력하면 종료합니다.
    while문을 이용해서 작성할 것!
  • 고칠 점
    • 처음에 변수 i를 while문 바깥에서 초기화하는 실수를했다.
      (그래서 반복이 멈춤)
      안쪽의 while문(구구단을 출력할)을 먼저 작성하고 바깥의 while로 감쌌다면 실수가 적었을 텐데…
    • 바깥의 while문은 break;으로 빠져나오기 전에는 계속 실행할 코드니까 조건에 바로 (true)를 넣었어야 했다.
    • 안쪽의 while문에서 println보다는 printf가 적기 편하고 보기도 편했다.
      System.out.printf(”%dx%d=%d”,k,i,k*i)



 🌟 정리하면서... 

  • 이중 반복문은 작성할 때 어떻게 출력될지 차근차근 생각하면서 작성해야 원하는 결과가 출력될 수 있는데 조건과 반복될 실행을 2개다 고려하면서 작성하려니 헷갈리는 것이 많았다.
  • 오늘 처음으로 내부평가 시험을 봤는데 주말에 책을 읽었음에도 주관식이라 어렵게 느껴졌다. 외부평가때는 더 자세히 나온다는데 미리 조금씩 요약정리본을 만들어야 겠다.



profile
제가 공부하고 공유하고 싶은 글을 올리고 있습니다.

0개의 댓글