안녕하세요,
The C programming language S/E로 C언어를 독학하고 있습니다.
예제를 풀다보니 '각 단어의 빈도수를 수직방향으로 출력하는 히스토그램을 만들어라' 와 같은 식의 예제가 있더군요.
이걸 어떻게 풀어야 하나 고민하다 단어의 길이가 10 이하인 것들 중에서 빈도를 출력하는걸로 임의로 범위를 한정시켜서 프로그램을 짰습니다.
위 예제의 경우 튜토리얼에 있는 거라서 튜토리얼 안에서 다룬 내용으로 풀 수 있어야 맞는 것 같은데 그냥 임의대로 저렇게 제한을 걸고 풀어도 상관 없는걸까요? 입력된 단어들의 길이를 체크해서 단어 길이별로 빈도수를 저장할 배열을 생성해주는 함수를 만들면 단어의 길이를 제한하지 않고도 만들 수는 있을 것 같은데 함수를 만드는 방법은 튜토리얼 뒷 부분에 있는 상황입니다. 아직까지는 다룬 내용을 이용해서 짤 수 있는 예제들이었는데 이건 잘 모르겠습니다.
사실 영어 단어가 가장 길어봐야 40 몇자라니까 0~40까지 값이 있든 없든 출력해버리게 만드는 방법도 있을 것 같은데 이건 뭔가 스마트(?)하지 않은 방법인 것 같아서 패스했습니다.(논리상 10까지 만드나 40까지 만드나 큰 차이가 없는 것 같아서요)
지금 같은 상황이, 풀 수 있는데 그냥 포기하는 것 vs 이 정도는 적당히 하고 넘어가도 되는 것 중에 어디에 해당하는지 궁금합니다. 처음으로 프로그래밍 언어를 독학하다보니 이정도는 넘어가도 된다는 식으로 대충 때우게 될까봐 걱정이 되네요.
답변에 도움이 되실지는 모르겠는데 제가 짠 코드도 첨부해보겠습니다.
https://github.com/diozelux/worknote/blob/master/E1-13v.c- 길이가 0~10인 단어의 빈도수를 저장할 배열을 만들고, 이 배열에 저장된 빈도수의 최댓값을 찾아 max에 저장.
- max의 값이 배열에 저장된 빈도수 값보다 작거나 같을 때 **이 출력되도록 해서 수직방향으로 히스토그램을 출력하게 되어 있습니다.(**인 이유는 %2d로 자릿수를 2자리로 통일시켜서 조금이라도 보기 좋게 하려고 이렇게 했습니다. 완전 막대처럼 깔끔하게 출력되기 하는 방법을 몰라서 **로.. putchar()를 이용해서 ASCII 코드를 넣어볼까도 했는데 귀찮아서 그냥 **로 넘어가기로 했습니다.)