백준
성적을 받아서 막대그래프 만들기
딴짓거리
2021. 8. 13. 13:10
#include <stdio.h>
int main()
{
int arr[10];
int num, i, j, k, l, tmp;
for (i = 0; i < 10; i++)
{
printf("입력: ");
scanf("%d", &num);
arr[i] = num;
}
for (j = 0; j < 10; j++)
{
printf("%d: ", j + 1);
for (k = 0; k < arr[j]; k++)
{
printf("■");
}
printf("\n");
}
for (j = 10; j > 0; j--)
{
for (k = 0; k < 10; k++)
{
if (arr[k] >= j)
{
printf("■");
printf("\t");
}
else
{
printf("\t");
}
}
printf("\n");
}
}
10명의 학생들에게 데이터를 입력 받고
그 값을 토대로 막대그래프를 만든다
누워있는 막대는 그리기 매우 쉬울거 같아서
세워져있는 그래프까지 한번 만들어 보았다
for (j = 0; j < 10; j++)
{
printf("%d: ", j + 1); //몇 번째 학생의 성적인가?
for (k = 0; k < arr[j]; k++)
{
printf("■");
}
printf("\n");
}
누워있는 막대 그래프다
말그대로 반복문으로 저장되어 있는 값만큼 돌려주면 된다.
탭을 눌러주니 요상해지긴 했지만 보기에는 나름 깔끔하다.
for (j = 10; j > 0; j--) //1.
{
for (k = 0; k < 10; k++) //2.
{
if (arr[k] >= j) //3.
{
printf("■");
printf("\t");
}
else
{
printf("\t");
}
}
printf("\n"); //4.
}
세로로 쌓는거는 나름 시간이 좀 걸렸다.
일단 한층한층 쌓아간다는 느낌으로 짜 보면 어떨가 고민해 보았다.
또한 코드 단순화를 위해 값을 10이하로 제한해서 짰다.
1. 값이 최대 10이니 세로로 10층을 쌓는다.
위에서부터 아래로 작성되므로 10에서 0으로 내려오도록 한다.
2. 값을 10개를 입력받으니 10번 반복한다.
3. 각 층에 적힐 성적을 선별해서
10층까지 표시되야 될 수는 체크, 10층까지 못올라오는 수는 탭으로 패스
이런식으로 짜보았다.
j 층보다 크거나 같은 수를 가지고 있으면 체크(이런식으로 해야 아랫층까지 잘 메워지겠지)
j층보다 작은 수는 탭으로 패스
4.각 층마다 줄을 바꿔줘야 그래프가 만들어질것이다.
탭을 써줬더니 듬성듬성해졌다..
굳이 탭을 쓴 이유는 그래프 아래에 줄맞춰서 숫자나 순서같은 것도 넣어주려 했는데
귀찮아서 패스했다..
어쨋든 단순한 문제였지만
여러가지 생각 할 거리를 준 재미있는 문제였다.