그냥 가끔의 기록장

백준 2438, 2439 본문

기타 개발/백준 문제풀이

백준 2438, 2439

the phoenix 2020. 2. 26. 21:15

for문을 활용한 단골 문제인 별찍기다.

 

백준 2438 문제

 

문제 풀이

 

자칫하면 함정에 빠질 수 있다. 우선 우리는 별을 n번 찍어야 하고, 각 줄마다 별을 1,2,3,....n개씩 찍어야한다.

즉, 중첩 for문 (nested for loop)을 사용해야 한다. 

 

설명을 타자로 치기 어려워서 손 글씨를 첨부한다.

 

첨부한 손글씨 해석이 어려울....수도 있으니 다시 적으면 

1) 총 5개의 줄을 출력한다. (바깥쪽 for문)

2) 각 줄별로 1,2,3,4,5개의 별을 출력한다. (안쪽 for문)

 

for(int i=1; i<n+1; i++){                  <- 1)

    for(int j=0; j<i; j++){                   <- 2)

              printf("*");

    }

    printf("\n");                               <-3)

}

이렇게 된다.

 

* 코드를 보고 차례로 i에 숫자를 대입해보면 이해하기 더 쉽다.

 

 i=1일 때 

1) 첫번 째 줄을 출력하되

2) j<1이므로 j=0 에서만 *을 1번 출력하고 안쪽 for문 빠져나옴

3) 한 줄 띄고 바깥쪽 for문 들어감

 

 i=2일 때

1) 두번 째 줄을 출력하되

2) j<2이므로 j=0,1 총 2번 *을 출력하고 안쪽 for문 빠져나옴

3) 한 줄 띄고 바깥쪽 for문 들어감

......

 

 i=5일 때

1) 다섯번 째 줄을 출력하되

2) j<5이므로 j=0,1,2,3,4 총 5번 *을 출력하고 안쪽 for문 빠져나옴

3) 한 줄 띄고 바깥쪽 for문 들어감

 

전체 코드는 아래와 같다. 

 

백준 2439 문제

 

 

문제 풀이

 

2438 문제와 동일하다. 다만 오른쪽으로 정렬되어 있다.

 

줄 하나씩을 살펴보면

첫째 줄: 빈칸 4개+ 별 1개

둘째 줄: 빈칸 3개+ 별 2개

셋째 줄: 빈칸 2개+ 별 3개

..... 

이렇게 구성되어 있다. 즉, 별과 빈칸의 합이 5로 이는 줄의 개수와도 같다. (바깥쪽 for문이 반복하는 횟수==n과 동일하다.)

 

우리는 이걸 통해 2439문제도 중첩 for문을 사용하되 안쪽 for문이 2개여야 한단 걸 알 수 있다.

(빈칸용 for문, 별 용 for문)

줄의 수가 n이라면 빈칸의 수는 n-i개, 별의 수는 i개 일 것이다. 

 

즉, 2438에서 

for(int i=1; i<n+1; i++){                  <- 1)

    for(int j=0; j<n-i; j++){

              printf(" ");

    } 

    for(int j=0; j<i; j++){                   <- 2)

              printf("*");

    }

    printf("\n");                               <-3)

}

 

빨간색 코드만 추가하면 된다. 이론은 2438과 동일하다.

 

전체 코드는 아래와 같다. 

'기타 개발 > 백준 문제풀이' 카테고리의 다른 글

백준 10951, 10952  (0) 2020.03.03
백준 10871  (0) 2020.03.03
백준 11021, 백준 11022  (0) 2020.02.26
백준 2741, 2742  (0) 2020.02.26
백준 15552  (0) 2020.02.26
Comments