c언어 독학문제풀이중 질문
글쓴이: 익명 사용자 / 작성시간: 수, 2018/09/19 - 2:14오후
[문제]
자연수 n(n≤6)을 입력받아 "출력 예"와 같이 공백으로 구분하여 출력되는 프로그램을 작성하시오.
주의! 문자는 공백으로 구분하되 줄사이에 빈줄은 없다.
[입력]
3
[출력]
A B C
D E 0
F 1 2
정답:
#include "stdio.h"
int main(void)
{
int a=0,b=0,c=0,d=0,e=0,f=0;
char h='A';
scanf("%d",&a);
for(b=1;b<=a;b++){
for(c=a;c>=b;c--)
printf("%C ",h++);
for(c=1;c
printf("%d ",f++);
printf("\n");
}
}
이러한 문제들을 많이풀고있는 C언어 입문자입니다. 하지만 문제를아무리풀어도모르겠고 해설을봐도 이게 어떻게 적용이될까 하여 알아봐도 정확한 이해가 안갑니다. 문제풀이는 스스로 해결해야되는거지만 도저히 안돼겠어서 도움을 요청합니다..
위 문제에 b<=a 처럼 문자들의 크기배열은 왜 이루어지는것이며 c-- b++등에 전개로인해 어떻게문제가 풀리는등 자세한 해석을 써주신다면 정말감사하겠습니다. 이번한번만 이해를하면 나머지문제들은 왠만하게 이해하여 풀수있을것같습니다
Forums:
문제에 문제 있는 거 같네요.
저는 문제부터 이해가 안 되네요.
3을 입력했을 때
출력이
A B C
D E 0
F 1 2
나오도록 하는 프로그램을 만들라고요?
무슨 규칙이죠?
잘못된 문제 갖고 님께서 스트레스 받지 마시길.
질문할 때는
https://wiki.kldp.org/wiki.php/DocbookSgml/Beginner_QA-KLDP#AEN70
참고하세요.
세벌 https://sebuls.blogspot.kr/
한심한 문제, 한심한 정답
일단, 문제가 정말 마음에 안 듭니다.
n=3일 때의 예시를 줄 테니 적당히 패턴을 파악해서 n=1~6일 때의 답은 알아서 맞추라는 건가요?
아무리 간단한 패턴이 자명하게 눈에 띈다고 해도 절대 납득할 수 없는 문제 서술입니다.
아래 코드가 답이 될 수 없는 이유는 뭐죠?
이까짓 디테일에 뭘 그렇게 예민하게 구냐고 생각하실 수도 있어요.
하지만 프로그래밍은, 특히 알고리즘 공부를 할 때는, 원래 이런 디테일에 민감하게 신경써야 합니다.
정답이라고 주신 코드도 한심하기 짝이 없네요.
int a=0,b=0,c=0,d=0,e=0,f=0;
라니, 이런 코드를 보면 보통 세 가지 중 하나라고 생각을 합니다.1. 고의적인 트롤링이거나 2. 코드 골프거나 3. ioccc 출품작?
워낙 짤막하고 간단한 코드니까 이런 식으로 짜도 사실 크게 문제는 없고 동작이야 당연히 잘 되겠지요.
하지만 결코 권장할 만한 스타일은 아닙니다. 입문자에게 보여진다는 전제라면 더더욱 문제가 있죠.
질문에 대한 직접적인 답은 아니라서 죄송합니다만, C언어를 입문하시려거든 다른 방법을 찾아보시는 게 더 나을 것 같습니다.
고의 트롤링이거나 무슨 컨테스트 같지는 않고...
고의 트롤링이거나 무슨 컨테스트 같지는 않고...
문제 낸 사람의 실력이 다른 사람의 질문에 답변을 할 수준조차 안되는 단순한 경우 같습니다.
자기가 처한 환경에 대한 정보를 다른 사람도 당연히 알고 있다고 생각하며 질문을 하듯 문제를 낸 것이라 생각됩니다.
문제(질문)을 받아든 사람이 뭘 가장 답답해 할 것인가를 생각해 본 적이 단 한번이라도 있을지 의심스럽습니다.
심심하니까 한번.
뭐 고작 이 정도 길이의 코드에 가독성을 논하고 스타일을 논하는 게 조금 우습다는 생각도 들기는 합니다만,
어쨌든 코드를 읽고 공부해야 하는 입장이면
int a=0,b=0,c=0,d=0,e=0,f=0;
이러는 코드보다는 이게 조금이라도 나을 겁니다.문제 설명 드리면... 세모 만들기
맞는지는 모르지만.
세모 모양으로 만들라는겁니다. ㅇ_ㅇ;;
세모 ABCDEF
세모 012
별 그리기 예요.
http://codepad.org/4paphBpk
----------------------------------------------------------------------------
젊음'은 모든것을 가능하게 만든다.
매일 1억명이 사용하는 프로그램을 함께 만들어보고 싶습니다.
정규 근로 시간을 지키는. 야근 없는 회사와 거래합니다.
각 분야별. 좋은 책'이나 사이트' 블로그' 링크 소개 받습니다. shintx@naver.com
1,2,4,5이 입력됐을때는요?
1,2,4,5이 입력됐을때는요?
세모는 오직 입력이 3,6일때만 가능한것 같은데......
A B C D
A B C D
E F G 0
H I 1 2
J 3 4 5
"i번째 행은 n-i+1개의 알파벳과 i-1개의 숫자로 이루어지고, 각 알파벳과 숫자는 여러 행에 걸쳐 계속 증가한다."라는 규칙이라고 생각되네요.
새로 만들어야 할겁니다.
ㅇ_ㅇ;; 그냥 되는 방식만 구현해봤습니다.
----------------------------------------------------------------------------
젊음'은 모든것을 가능하게 만든다.
매일 1억명이 사용하는 프로그램을 함께 만들어보고 싶습니다.
정규 근로 시간을 지키는. 야근 없는 회사와 거래합니다.
각 분야별. 좋은 책'이나 사이트' 블로그' 링크 소개 받습니다. shintx@naver.com
훨씬 더 명확하게 조건을 제시하는 문제 사이트들이
훨씬 더 명확하게 조건을 제시하는 문제 사이트들이 많을 겁니다.
알고리즘 경연 사이트들이라거나(그런 곳에도 초급 수준의 문제들도 나오니까)
외국 사이트라면 오일러 프로젝트라거나.
적어도 본문에 적힌 그런 문제를 내는 곳보다는 다른 곳을 찾아보시는 게 나을 것 같습니다.
(이유는 다른 분들이 다 적어주셨고...)
어쨌거나 본문 문제를 굳이 좋게 해석해서,
가로 세로 길이 N인 정사각형 모양으로 문자를 출력하되,
정사각형을 우상단-좌하단 대각선을 기준으로 두 개의 삼각형 영역으로 쪼개고
좌상단 삼각형(대각선 포함)은 A, B, .. 순으로 채워넣고
우하단 삼각형은 0, 1, ... 순으로 채워넣어라
정도로 해석이 되고,
그러면 N=4일 때도 한번 손으로 그려보면
이렇게 쓰면 "i번째 줄"에 몇 개의 문자와 숫자가 출력되어야 하는지 규칙이 보입니다.
그게 https://kldp.org/comment/627726#comment-627726 에 다른 분이 쓰신 것처럼
"i번째 줄에는 N-i+1개의 문자, i-1개의 숫자" 인 거죠.
그 다음, 각 줄에 이렇게 "A개의 문자, B개의 숫자"를 출력하려니, 루프가 두번 쓰여야 합니다. A번 반복하며 문자 하나씩 출력하는 루프와, B번 반복하며 숫자 하나씩 출력하는 루프
그리고 이 과정이 N번 반복되어야 하니 다시 루프가 있어야겠죠.
이 규칙은 얼마든지 자신의 편의를 위해 바꿀 수 있습니다.
만일 줄 번호 i 를 1부터 시작하지 않고 0부터 시작하는 걸로 하면 "N-i개의 문자, i개의 숫자"로 더 간단해질 수도 있죠. 이렇게 0부터 시작하는 걸로 구현한 게 https://kldp.org/comment/627717#comment-627717 에 있는 코드입니다.
본문의 코드는 일단 변수명이 a,b,c,...이렇게 생각없는 이름이라서 매우 피곤하지만 결국 같은 식으로 구현한 거니까, 일단 변수 이름을 좀 그럴싸하게 고쳐놓고(a가 N, b가 row에 해당하겠군요) 차분히 보시면 똑같은 일을 하고 있는 걸 아실 수 있을 겁니다.
좋은 하루 되세요!
댓글 달기