c언어 처음 배우고 있는데 반복문 부분 공부하고 문제 푼 다음 답지 보고 자괴감 느끼고 있습니다...
'출력 예'와 같이 '*'를 출력하는 프로그램을 작성합니다. 앞서 만든 두 프로그램의 코드
를 참고하여 완성합니다. 기존 예제와 이 예제의 가장 큰 차이는 출력되는 '*'의 개수가
행의 증가에 대해 1씩 증가하지 않는다는 점입니다. 또한 힌트로 '우측 경계의 인덱
스'라는 말을 하고자 합니다. '*'의 개수도 중요하지만 인덱스 개념으로 이 예제를 살폈
을 때, X축 좌표 인덱스가 어떻게 변화하고 있는지 추적함으로써 쉽게 문제를 해결할
수 있습니다.
출력 예:
*
* * *
* * * * *
* * * * * * *
* * * * * * * * *
#define _CRT_SECURE_NO_WARINNGS
#include <stdio.h>
int main(void)
{
int i = 0;
int nStar = 0;
int nTab = 0;
for (i = 0; i < 5; ++i)
{
for (nTab = 0; nTab < 4-i; ++nTab)
{
putchar('\t');
}
for (nStar=0;nStar<(i*2)+1;++nStar)
{
putchar('*');
putchar('\t');
}
putchar('\n');
}
}
모양은 맞긴 한데 분명 출제가 요구한건 이게 아니었겠지요..ㅠ
전처리기 명령어는 습관처럼 시작부터 써서 들어가 있습니다.. 답지는 참 간단하게 잘풀었는데 어찌 저는 안되는건지 모르겠네요...자괴감듭니다ㅠ
어떤 부분 보고 자괴감 오는거야? 글만 보고는 뭐가 문제인지 모르겠는데
컴퓨터 끄고 누워서 모바일로 답글 남겨요. 일단 제 코드에 변수가 답지보다 하나가 더 많아요. 또 반복문 안에 반복문이 두개가 들어가있어요. 제 힘으로 풀고싶어서 답지는 첫부분 보자마자 아 이거아니다 하고 다 안읽었습니다만
분명 저 차이로도 충분히 비 효율적인 코드라고 생각해요. 그리고 누가봐도 쉽게 이해될만큼 한눈에 들어오지도 않으니 좋은 코드가 아닐거라는 생각입니다.
그래서 제 생각의 흐름이 너무 편협한 것이 아닌가 라는 생각이 들었습니다. 무엇을 의도한 코드인지 이해하기 쉽고, 효율적으로 풀기 위해선 어떻게 접근하는 것이 좋을지 조언을 구하고싶습니다.
출력 답안 자체는 분명 맞게 나오는 코드이긴합니다. 다만 위에서 말씀드렸던 것처럼 본질적으로 출력물의 답이 맞는가 자체보다 제 사고방식에 문제가 있는게 아니냐 라는 의문입니다.
변수가 하나 더 적다는건 아마 nTab과 nStar 변수를 통일 했을 것 같고 지금 배우는 레벨에서는 해설에서 요구하는게 저게 맞는거임.
행 열 숫자가 고정돼있다 치면 nStar for문 하나 지우고 if문으로 대체 가능할 것 같은데 별찍는 문제 푸는 중이면 if-else 이전 아니야? 그러니 저 해설대로 푼게 맞는거 같음
삼항 연산자부터 해서 if문들도 포함하여 나름 이래저래 분명 배웠습니다ㅠ다만 자신있게 말씀드릴수 있는건 활용할줄을 몰라서가 아니라 저 반복문에 핀트가 꽂혀서 어떻게든 반복문으로 해결해보겠다 마인드로 들이밀었던 것이지요. 다른 무언가를 좀 활용했다면 좀더 수월했을거란 생각은 들었지만 반복문으로 해결하려고 하다보니 결과론적으로 바보가 되어버렸네요ㅠ
그래도 공부하고 있는 단계를 고려했을때 영 못써먹을 수준은 아니니 걱정마라 인 것이라면 어느정도 위안이됩니다. 배운것들을 활용해서 더 수월하게 코드를 쓸 수 있도록 신경써보아야겠습니다..
병신
졷버러지같은게지가뭐되는줄아나보네ㅋㅋ
??