티스토리 뷰
백준 온라인 저지(BOJ) 2444번 별 찍기 - 7
https://www.acmicpc.net/problem/2444
2444번: 별 찍기 - 7
첫째 줄부터 2×N-1번째 줄까지 차례대로 별을 출력한다.
www.acmicpc.net
* 사용언어 : C언어, C++
1. 문제
N 을 입력받아 출력과 같은 마름모 형태로 별(*)을 출력
2. 풀이
기타를 처음 배우면 C코드에서 한 번, F코드에서 한 번 고비가 옵니다.
거기서 많은 사람들이 포기하는데 그 고비를 넘고나면 이후 과정은 생각보다 어렵지 않습니다.
코딩에서의 별 찍기 문제가 기타에서의 C코드나 F코드 같은 고비가 아닐까 싶습니다.
2차원 map 과 이를 구현하는 2중 for 문이 익숙한 상태라면 쉬운 문제이지만,
초심자에게는 코딩을 포기하고 싶게 만드는 어려운 문제라고 할 수 있습니다.
문제를 풀려면 먼저 2중 for 문에 대해 이해를 해야합니다.
(0부터 사용하는 것이 맞으나 설명하기 쉽게 모든 index 는 1부터 사용했습니다)
바깥 쪽 for 문의 index(i) 는 y축, 각 줄을 의미한다고 볼 수 있습니다.
i 가 1이면 첫 번째 줄, 2면 두 번째 줄, ... n 이면 n 번째 줄입니다.
안 쪽 for 문의 index(j) 는 x축, 해당 줄의 한 칸을 의미한다고 볼 수 있습니다.
j 가 1이면 첫 번째 글자, 2면 두 번째 글자, ... n 이면 n 번째 글자입니다.
설명한 i 와 j 를 문제의 예시 출력(n = 5인 경우)으로 표현하면 아래와 같습니다.
이제 각 줄 별로 '공백' 과 '별' 을 개별로 나누어 생각합니다.
공백이 1번 줄에 4개, 2번 줄에 3개, ...
별이 1번 줄에 1개, 2번 줄에 3개, ...
공백과 별을 따로 나눈 뒤 규칙을 생각해내면 되는데,
고등 수학에서 등차수열의 일반항을 찾는 원리와 비슷합니다.
각 줄마다 일반항만큼 j 개의 '공백' or '별' 을 찍게 하면 됩니다.
(일반항을 찾는 과정은 풀이로 굳이 작성하지 않고 코드로 대체하겠습니다)
추가로 i 가 5인 시점을 기준으로 규칙이 반전되므로,
for 문을 ① i 를 1 부터 5(n) 까지, ② 6(n + 1) 부터 9(2 * n - 1)까지 2 덩어리로 나누어 작성하였습니다.
3. 코드
#ifndef _CRT_SECURE_NO_WARNINGS
#define _CRT_SECURE_NO_WARNINGS
#endif
/*
2444_별 찍기 - 7
1116kb 0ms
*/
#include <cstdio>
int main() {
#ifdef _WIN32
freopen("input.txt", "r", stdin);
#endif // _WIN32
int n;
scanf("%d", &n);
int i, j;
for (i = 1; i <= n; ++i) {
for (j = 1; j <= n - i; ++j) printf(" ");
for (j = 1; j < 2 * i; ++j) printf("*");
puts("");
}
for (i = n + 1; i < n * 2; ++i) {
for (j = n; j < i; ++j) printf(" ");
for (j = 1; j < 2 * (2 * n - i); ++j) printf("*");
puts("");
}
return 0;
}
* puts("") 는 printf("\n") 과 같은 역할입니다.
'개발자 > 문제풀이 (C언어)' 카테고리의 다른 글
[백준/BOJ] 10988번 팰린드롬인지 확인하기 (C/C++) (0) | 2023.04.25 |
---|---|
[백준/BOJ] 10812번 바구니 순서 바꾸기 (C/C++) (0) | 2023.04.22 |
[백준/BOJ] 9086번 문자열 (C/C++) (0) | 2023.04.18 |
[백준/BOJ] 2743번 단어 길이 재기 (C/C++) (0) | 2023.04.13 |
[백준/BOJ] 27866번 문자와 문자열 (C/C++) (0) | 2023.04.13 |
- Total
- Today
- Yesterday
- 호암의마지막꿈
- JUNGOL
- 여가포인트
- 시대예보
- 자동차보험
- 관계가상처가되기전에
- 당신도느리게나이들수있습니다
- 센터독서클럽
- 동탄에듀센터2
- 안전운전특약
- AdSendse
- 정올
- 정세현의통찰
- 긴 자리 곱셈
- 쿠프마케팅
- 영화감상평
- 삼성전자
- 긴 자리 덧셈 뺄셈
- 최재천의공부
- 알고리즘
- 인간본성불패의법칙
- 나는늘잘해야한다고생각한다
- 유연함의힘
- 세상을 읽는 새로운 언어 빅데이터
- 자료구조
- 문현공
- 동탄에듀센터
- 나의첫죽음학수업
- 독서 감상평
- 독서감상평
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |