2022. 1. 17. 15:05ㆍPS (Program Solving)/BOJ (백준)
문제 설명
https://www.acmicpc.net/problem/2442
접근 방법 - 이중 반복문을 이용한 기본 문제 (별 찍기-1 문제의 변형)
백준의 2442번 문제는 이중 반복문을 응용하는 문제이며, 이는 별 찍기-1 문제의 변형 문제이기도 하다.
이런 문제에 아직 많이 익숙하지 않다면 아래의 링크를 참고해보는 편이 좋을 것이다.
https://smary-it.tistory.com/23
이 문제는 별 출력과 공백 출력을 함께 감안해야 하며, 이 2가지가 출력되는 규칙을 찾아야 하기도 하다.
필자는 아래와 같은 규칙을 찾았으며, 이를 이용해 코드를 작성하였다.
필자가 이용한 규칙
위 예제처럼 5를 입력받은 경우를 중심으로 설명하고자 한다.
- 공백 출력: 첫 번째 행에선 4개의 공백, 두 번째 행에선 3개의 공백, ... , 마지막 행에선 공백 출력을 하지 않는다.
따라서, 공백은 행에 따라서 n-1개 ~ 0개 출력하게끔 하면 된다.
- 별 출력: 첫 번째 행에선 1개의 별, 두 번째 행에선 3개의 별, ... , 마지막 행에선 9개의 별을 출력한다.
따라서, 별의 출력은 행에 따라서 1개 ~ 2*n-1개 출력하게끔 하면 된다.
코드의 실행 순서
1) 숫자(n)를 입력받는다.
2) 이중 반복문을 실행한다. (i: 행, j: 열)
행 번호 i를 제어하는 반복문 안에 공백을 출력하는 반복문, 별을 출력하는 반복문 2개를 순차적으로 작성한다.
- 공백을 출력하는 반복문: 열 번호 j는 n-i에서부터 1까지 점점 감소하는 변수이며, 그 과정에서 공백을 하나씩 출력한다.
- 별을 출력하는 반복문: 열 번호 j는 1에서부터 i*2-1까지 점점 증가하는 변수이며, 그 과정에서 별을 하나씩 출력한다.
(공백은 처음엔 n-i개 출력했다가, 행을 거듭하면서 출력하는 횟수를 1씩 줄인다.)
(반면에 별은 처음엔 1개 출력했다가, 행을 거듭하면서 출력하는 횟수를 2씩 늘린다.)
=> 이 과정을 행 번호 i가 n과 같아질 때까지 실행한다.
3) 이중 반복문이 모두 수행되면, 실행 종료한다.
성공한 코드
#define _CRT_SECURE_NO_WARNINGS
#pragma warning(disable: 4996)
#include <stdio.h>
//백준 2442번 코드
int main() {
int n;
scanf("%d", &n);
for (int i = 1; i <= n; i++) {
for (int j = n - i; j > 0; j--) {
printf(" ");
}
for (int j = 1; j <= i * 2 - 1; j++) {
printf("*");
}
printf("\n");
}
}
제출 결과
(2021.12.22 백준 2442번 문제 제출 결과)
'PS (Program Solving) > BOJ (백준)' 카테고리의 다른 글
[백준 BOJ] 2444번 별 찍기 - 7 (C언어) (0) | 2022.01.20 |
---|---|
[백준 BOJ] 2443번 별 찍기 - 6 (C언어) (0) | 2022.01.20 |
[백준 BOJ] 2441번 별 찍기 - 4 (C언어) (0) | 2022.01.17 |
[백준 BOJ] 2440번 별 찍기 - 3 (C언어) (0) | 2022.01.16 |
[백준 BOJ] 2439번 별 찍기 - 2 (C언어) (0) | 2022.01.15 |