일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
29 | 30 |
- 코딩테스트
- 텍스트마이닝
- 언리얼학습
- 정보처리기사필기
- 핵심프로젝트
- 딥러닝
- 데이터분석
- 데이터시각화
- c언어
- C++
- 파이썬
- 데이터입출력구현
- 자연수의성질
- 선형회귀모델
- 자바 실습
- 데이터베이스
- JSP/Servlet
- 자바
- pandas
- numpy/pandas
- html/css
- 머신러닝
- Orange
- 디버깅
- 중학수학
- 요구사항확인
- 선형분류모델
- 이수증
- 정보처리기사실기
- 언리얼프로젝트
- Today
- Total
클라이언트/ 서버/ 엔지니어 " 게임 개발자"를 향한 매일의 공부일지
반복문 응용 4 - 피라미드 삼각형 별 찍기 본문
오늘도 별 찍기 문제에 도전해보기로 했다. 어제부터는 별 찍기 문제뿐 아니라 한 주제에 관한 코딩 테스트 문제도 풀고 있다. 별 찍기 문제는 조금 어려워서 매일 내가 할 수 있는 분량만큼 풀어보기로 했다. 조금씩 훈련하는데도 어제보다 조금씩 성장하는 걸 느꼈다.
어제까지만 해도 최대한 많은 문제를 풀어 이 한 페이지에 담으려고 했었다. 하지만 문제를 그냥 풀고 정답을 맞추는 건 별 의미가 없다는 걸 알게 되었다. 한 문제를 풀더라도 확실히 이해해야 다음에 같은 문제를 접해도 스스로 풀 수 있는 것이다.
오늘 풀어볼 문제는 피라미드 삼각형이다. 이 삼각형도 여러 종류가 있으니 하나씩 배우며 학습해보자!
피라미드 삼각형 출력하기 <1358번 응용>
🙂 문제 1번
어떤 수 n을 입력받으면 n줄의 피라미드 삼각형을 출력한다.
풀이
#include <stdio.h>
int main(void)
{
int n;
scanf_s("%d", &n);
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n - i; j++)
{
printf(" ");
}
for (int j = 0; j < 2*i+1; j++)
{
printf("*");
}
printf("\n");
}
return 0;
}
이 문제는 코딩테스트에 없어서 기존의 문제를 약간 변형해서 풀어보았다. 홀수의 별이 출력되어야 하므로 이중 for문에서 이 값을 적용해주면 된다. 근데 한줄의 여백이 띄어져서 나오는데 이 부분을 왜 그런지 잘 모르겠다.
space를 줄여주는 코드도 작성해보았는데 마찬가지였다.
피라미드 삼각형 출력하기 2 <1358번>
🙂 문제 2번
어떤 수 n을 입력받으면 다음과 같은 삼각형을 출력한다. 여기서 입력되는 n은 반드시 홀수이다.
##include <stdio.h>
int main(void)
{
int n, cnt = 0;
scanf_s("%d", &n);
for (int i = 0; i < n; i += 2)
{
cnt++;
for (int j = 0; j <= n / 2 - cnt; j++)
{
printf(" ");
}
for (int j = 0; j <= i; j++)
{
printf("*");
}
printf("\n");
}
return 0;
}
이 문제는 5를 입력하면 별이 5개 출력되게 만들어야 한다. 먼저 3줄이 출력되어야 하므로 i는 2씩 커져야 할 것 같다.
그 다음에 공백은 5를 2로 나누는 것에서 하나씩 줄여주면 공백이 점차 줄어들게 된다.
그런 다음 별이 그만큼 증가하도록 만들어준다.
여기서는 공백이 출력되지 않았다. cnt는 공백을 줄여주는 문자인데 이 문제도 많이 어려워서 다음에 한번 더 풀어보려고 한다.
다이아몬드 별 출력하기
🙂 문제 3번
❓ 문제
가운데 부분이 9개가 되는 다이아몬드 별을 찍는다.
##include <stdio.h>
int main(void)
{
int n, cnt = 0;
scanf_s("%d", &n);
for (int i = 0; i < n; i += 2)
{
cnt++;
for (int j = 0; j <= n / 2 - cnt; j++)
{
printf(" ");
}
for (int j = 0; j <= i; j++)
{
printf("*");
}
printf("\n");
}
return 0;
}
사실 이 문제는 정말 많이 어려웠다. 피라미드 별 찍기 연습을 해서 앞의 모양은 찍을 수 있겠는데, 뒷 부분에 별이 줄어들게 하는 모양은 잘 되지 않았다.
그래서 문제를 할 수 없이 바꾸었다. 원래는 n을 입력하면 이런 모양이 나오도록 하려고 했으나 다음 줄에 7이 어떻게 해서 출력이 되는지 아직 잘 몰랐다.
학습을 마치고
오늘은 별 찍기 문제를 풀기 위해 영상을 4개 정도 시청한 것 같다. 여기 다 올리지는 않았으나 다양한 강사들의 문제 풀이 방식을 보면서 어떤 방식이 더 쉬운지도 조금 알게 되었다.
매일 별 찍기 문제를 풀고 있는데 나중에 응용이 되면 진짜 어려운 모양을 찍는 문제들도 도전해보려고 한다.
'알고리즘 및 자료 관리 > 알고리즘' 카테고리의 다른 글
데이터 출력 1 - 이스케이프 문자로 출력하는 비교적 쉬운 문제 (0) | 2024.08.24 |
---|---|
조건문 응용 1 - if~else, switch문을 사용해 조건에 맞는 결과값 출력하기 (0) | 2024.08.24 |
약수, 배수와 소수 1 <백준 코딩테스트> - 약수와 배수 문제 풀기 (0) | 2024.08.24 |
반복문 응용 3 - 사각형과 평행사변형 별 찍기 (0) | 2024.08.24 |
반복문 응용 2 - 삼각형 별 찍기 (0) | 2024.08.24 |