• Repetitive(반복문) 1

    2021. 4. 30.

    by. 와트

    드디어 한다. 대망의 별찍기.

    java의 꽃은 반복문이라고 할 정도로 반복문에 대한 중요성을 익히 들어왔다.

    그리고 정말 이전에 배운 것들보다 복잡해서 몇 번이고 다시 강의를 돌려봤다.

    반복문: 프로그램 수행 흐름을 바꾸는 역할을 하는 제어문 중 하나로 특정 문장들을 반복해서 수행하도록 함

    for(초기식; 조건식; 증감식) {수행될 문장;}

    - while(조건식) {수행될 문장; [증감식 or 분기문];}
    무한 루프의 경우, 조건 값을 항상 true로 놓을 것

    - do{수행될 문장; [증감식 or 분기문];} while(조건식);
    do안의 내용 먼저 실행하고 조건식 확인 후 true면 문장 수행, false면 종료.
    조건문이 true가 아니더라도 무조건 한 번 이상 수행

    - for(초기값1; 조건식1; 증감식1;) {
         수행될 문장1;
         for(초기값2; 조건식2; 증감식1) {
              수행될 문장2; }
         수행될 문장3; }
    중첩 반복문
    1) for문에 진입후 문장1 실행
    2) 두번째 for문에 진입해 조건식2가 false가 될 때까지 문장2 실행
    3) 조건식2가 false가 되면 문장3 수행 후 조건식1로 돌아오기
    4) 조건식1이 true면 반복, false면 종료

     

    분기문

    - break: 자신이 포함된 가장 가까운 반복문을 빠져나가는 구문

    - continue: 반복문 내에서만 사용 가능. 아래 부분 실행하지 않고 반복문 재실행. for문은 증감식, while문은 조건식으로 이동

     

    ※문제. 이중 for문을 이용하여 4줄 짜리 피라미드 모양 별 찍기/ 입력 받은 홀수 줄만큼 마름모 모양 별 찍기

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
        public void method1() {
            for(int i = 0; i < 4; i++) {
                for(int j = 3; j > i; j--) {
                    System.out.print(" ");
                }
                for(int j = 0; j < i*2+1; j++) {
                    System.out.print("*");
                }
                System.out.println();
            }
        }
    cs

    차근차근 들어가보겠다.

    더보기

    일단 첫번째 for문으로 4줄을 출력하고 종료하는 코드를 작성한다.

    int i = 0; i< 4; i++ ▶ i는 0부터 시작해서 1씩 증가하고, 4보다 작을 때까지만 실행. 즉, 0~3까지만 실행

    이때, 별은 1, 3, 5, 7로 증가한다. 피라미드 모양으로 출력되려면 별이 1개 찍힐 때 띄어쓰기는 총 3회 진행되어야 한다. 즉, (공백)(공백)(공백)(별) 모양으로 진행되어야 한다는 것.

    이를 쭉 정리하면 첫번째 턴은 (공백)(공백)(공백)(별)/ 두번째 턴은 (공백)(공백)(별)(별)(별)/ 세번째 턴은 (공백)(별)(별)(별)(별)(별)/ 마지막 턴은 (별)(별)(별)(별)(별)(별)(별)

    int j = 3; j >i; j-- ▶ j는 3부터 시작해서 1씩 감소하고, i보다 작을 때까지만 " "실행.

    int j = 0; j < i*2+1; j++ ▶반대로 "*"은 j가 0부터 시작해서 i*2+1보다 작을 때까지 1씩 증가(홀수로 출력되니까)

    이때, 안의 for문들은 모두 출력을 print로 해서 띄어쓰기 없이 출력하고, 한 차례가 끝나면 println으로 바깥에서 한번 출력하여 줄바꿈을 해준다.

    복잡해 보이지만 첫번째 for문으로 원하는 줄을 출력하고, 이에 맞춰 안의 for문들을 공백을 출력할 때와 별을 출력할 때로 나누어 식을 작성하면 된다. 

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    public void method2() {
            Scanner sc = new Scanner(System.in);
            System.out.println("홀수를 입력하시오: ");
            int num = sc.nextInt();
            
            for(int i=0; i <num/2; i++) {
                for(int j = num/2; j >i; j--) {
                    System.out.print(" ");
                }
                for(int j = 0; j < i*2+1; j++) {
                    System.out.print("*");
                }
                System.out.println();
            }
            for(int i = num/2; i >=0; i--) {
                for(int j = num/2; j >i; j--) {
                    System.out.print(" ");
                }
                for(int j = 0; j < i*2+1; j++) {
                    System.out.print("*");
                }
                System.out.println();
            }
    cs

    두번째의 경우, 홀수를 Scanner로 입력 받고, 마름모꼴을 두 개로 나누어 삼각형과 역삼각형 모양으로 별을 찍어야 한다. 즉, 두 개의 큰 for문이 있고, 그 안에 중첩으로 각각 2개가 더 있도록 하는 것.

    더보기

    Scanner로 int를 입력받아 num으로 선언.

    홀수를 입력했을 때, i를 반으로 나누어 i=0인 조건문과 i= num/2인 조건문을 가진 for문을 각각 작성한다.

    i=0일 때, i가 num/2보다 작을 때까지 1씩 증가하는 for문 안에 홀수로 별을 찍는다. 앞서 진행한 문제와 동일하게 진행.

    응용 문제는 글이 길어지니 다음에.

    '혼자 있는 방 > Java' 카테고리의 다른 글

    Array(배열)  (0) 2021.05.04
    Repetitive(반복문) 2  (0) 2021.05.02
    Conditional(조건문)  (0) 2021.04.30
    Operator(연산자)  (0) 2021.04.28
    변수(Variable)  (0) 2021.04.24

    댓글

Designed by Nana