백준(BaekJoon)

[BaekJoon/C] No.2439 별 찍기 - 2

ekdnjs510 2024. 3. 31. 21:33
728x90

https://www.acmicpc.net/problem/2439

 

2439번: 별 찍기 - 2

첫째 줄에는 별 1개, 둘째 줄에는 별 2개, N번째 줄에는 별 N개를 찍는 문제 하지만, 오른쪽을 기준으로 정렬한 별(예제 참고)을 출력하시오.

www.acmicpc.net

백준 알고리즘 2439번 별 찍기 -2 문제를 C언어로 코딩하였습니다.

No.2439 문제

 

해당 문제에서는 사용자로부터 N을 입력 받고, N만큼의 행을 생기며, 공백을 포함한 별을 1개씩 늘지만 왼쪽부터 공백이 생기게 출력하도록 문제를 풀어야 된다.

 

이 문제를 해결하기 위한 핵심공백을 출력할 반복문*을 출력할 반복문을 나누어서 사용해야 된다는 점이다.

 

<풀이>

1. 입력받을 N, 반복문인 for에서 사용할 k, i, j를 변수로 선언해준다.

2. 사용자로부터 입력받기 위해 입력함수인 scanf()를 사용한다. => 자료형이 정수이므로 %d를 사용, scanf 에서는 print와는 달리 &(변수명)을 사용하여야 옳바른 주소로 이동할 수 있게 해준다. 

3. 위 소스코드의 5번줄에서의 반복문은 쉽게 생각해서 N(=K)개의 행을 만들어준다고 생각하면 된다. => 행으로 만들기 위해서는 printf("\n") 을 12번줄에 입력해주었다.

4. 5번줄이 전체를 실행하는 반복문이라면 6번의 반복문과 9번의 반복문은 각각 공백과 별을 출력해주는 반복문이다.

  4-1) for (i=1;i<=N-k;i+) 의 의미는 공백을 출력하는 내부 반복문으로 N-k 만큼 공백을 출력해준다.

         => 예시로 N=2일 때, 첫 번째 행은 2-1 -> 공백 1개 출력되고 두 번째 행은 2-2 -> 공백 0개가 출력된다.

  4-2) for (j=1; j<=k; j++) 의 의미는 별을 출력하는 내부 반복문이다. => k(=N)만큼 별을 출력한다. 

 

※만약 visual studio를 사용 시 입력함수인 scanf()에서는 따로 경고메시지가 뜨며 실행을 못한다. 때문에 경고메시지를 무시하도록 따로 설정해주거나 #define _CRT_SECURE_NO_WARNINGS 를 입력하여 경고메시지를 무시해준다.

 

 

[참고] https://gururuglasses.tistory.com/61, https://gabii.tistory.com/entry/BaekJoonC-%EB%B0%B1%EC%A4%80, 챗GPT

728x90