PGR21.com
- PGR21 관련된 질문 및 건의는 [건의 게시판]을 이용바랍니다.
- (2013년 3월 이전) 오래된 질문글은 [이전 질문 게시판]에 있습니다.
통합 규정을 준수해 주십시오. (2015.12.25.)
Date 2013/04/24 03:55:40
Name Lucky-Strike
Subject [질문] [C언어]삼각형 찍기 질문입니다.
안녕하세요. 이력서 쓰다 말고 이렇게 질문 올립니다.
이번에 구직활동을 하다가 어떤 회사에서 사전 인터뷰로 이런 문제를 올렸는데
아무리 생각해봐도 길이 안보여서 염치불구하고 질문 드립니다.
----------------------------------------------------------------------------------------
간단한 별찍기 문제입니다. (심심풀이로 풀어보시면 됩니다.)
** 단, 조건문을 사용하지 않습니다. '-'는 공백문자열입니다. 반복문은 2개를 초과할 수 없음
** printf, cout, system.out 등으로 그냥 찍는 게 아닌 건 아시죠? 혹시나 해서.. *^^*

----****
----***
----**
----*
---*
--**
-***
****

여기서 문제가 조건문을 쓰지 않고 반복문은 2개를 초과하지 않는다는 전제조건인데
계속 생각해보고 직접 코딩도 해봤는데 아무리 생각해도 조건문을 쓰거나 반복문을 3개 이상 쓰지 않는이상
불가능하다는 생각이 들고 있습니다.
저번에 같은 질문을 올렸었는데 아스키코드를 사용한다는 것을 생각해보고 있으나
아무리 생각해도 로직이 떠오르지 않아서 이렇게 질문 드립니다.
                int i, j;
        int ch1=32;

        for(i=8;i>0;i--) {
                for(j=0;j<i;j++) {
                        printf("%c",ch1);
                }
                printf("\n");
                ch1=32;
        }
대충 이런식으로 짜고 있는데..
조건문없이 5번째부터 별표를 어떻게 찍어야 할지
그리고 또 계속 줄어가는것이 아닌 5번째 줄 부터 4번째에서 더 이상 줄지않는 라인을 어떻게 해야 할 지 감이 안 잡힙니다.
혹시 아시는 분은 해답보다는 힌트쪽으로 알려주시면 매우 감사하겠습니다.
글 읽어주셔서 감사합니다.

통합규정 1.3 이용안내 인용

"Pgr은 '명문화된 삭제규정'이 반드시 필요하지 않은 분을 환영합니다.
법 없이도 사는 사람, 남에게 상처를 주지 않으면서 같이 이야기 나눌 수 있는 분이면 좋겠습니다."
이걸어쩌면좋아
13/04/24 04:35
수정 아이콘
1. 딱 8줄에 저만큼만 찍는거라면 2차원 배열을 선언하고 값을 미리 넣어놓은 후에 이중 for문으로 찍으면 되겠네요.
2. 임의의 입력이 들어온다면.. for문 하나로 별찍는 방법이 있습니다. 그 방법을 이용하고, 반 갈라서 윗단과 아랫단에 각각 하나의 for문을 쓰면 되겠네요. printf에서 커서의 위치를 변경하는 방법이 있으니 이를 활용하면 될거 같습니다.
3. 조건문의 범위가 단순히 if-else 인지는 모르겠는데, if-else만 해당되는거라면 매크로함수를 이용해보세요.
Lucky-Strike
13/04/24 04:45
수정 아이콘
1번도 생각을 해봤으나 출제자의 의도와 다른것 같아서 잠시 킵해뒀습니다. 알려주신 다른 방법을 이용해봐야겠네요. 늦은 시간에 답변 주셔서 감사합니다.
유게죽돌이
13/04/24 06:25
수정 아이콘
이걸어쩌면좋아 님이 말하신 1,2번의 방법은 출제자가 의도한 방법이 아닐거같습니다
그리고 조건문 없이 반복문 2개로 저걸 찍는건 불가능합니다. 혹시 문제조건이 2중 반복문까지만 허용한다는거 아닌지요?
2개'만' 사용해야한다면 매크로를 쓸수 밖에 없습니다
꿀호떡a
13/04/24 06:43
수정 아이콘
https://gist.github.com/hodduc/5447631 이런 건 어떤가요?
흠, 근데 조건문을 사용하지 말라는 게 썩 좋은 문제 같지는 않네요.

힌트를 원하시면 링크는 열지 마시고, 1.bitwise operator만 가지고 min이나 max를 만들 수 있는 것 2.printf에서 %*s를 이용하면 width를 조절할 수 있는 것 을 이용하시면 되어요.
Je ne sais quoi
13/04/24 09:05
수정 아이콘
지난 번 말씀드렸었는데, 아스키코드까지 안 가고 출력할 개수의 배열과 문자의 배열 두 개를 가지고 for loop 두 개로 할 수 있습니다. 파이썬이면 하나만으로도 되겠죠.
http://codepad.org/Mv9lXSNM 참고하세요.
13/04/24 09:42
수정 아이콘
위에 하나 밑에 하나씩 나눠서 반복문 2개로 조건문 없이 처리 가능합니다. 그냥 char array 선언하고 출력 내용을 바꾸는 식으로 하시면 됩니다.
http://codepad.org/CHpYa4d1
피자21
13/04/24 10:42
수정 아이콘
죄송합니다.
스포일러 (주의, 컴파일 해보진 않았음)
for (int i=0; i<8; i++)
[
for (int j=0; j<8; j++)
[
printf("%c", ('*'-' ')*((j-3.5)*(i+j-7)<=0) + ' ');
]

printf("\n");
]

선 두개 그어서 각 점이 어느 방향에 위치했는지 계산하면 깔끔하죠. (댓글에 중괄호가 안써지네요. 대괄호로 썼습니다.)
꿀호떡a
13/04/24 12:46
수정 아이콘
에이, 임의의 N에 대해 동작하지 않으면 반칙이죠. 그럼 반복문이 아니라 정말 printf만 가지고 해결해도 되니까.. 만약 그걸 의도하고 낸거면 출제자를 까도 되고요.
출제 의도상 임의의 N에 대해 동작해야 하지 않나 싶습니다. 즉 Array에 별이던 숫자던 미리 넣는 방식으로는 당연히 해결이 안 되죠.
Je ne sais quoi
13/04/24 13:17
수정 아이콘
1) 문제의 조건에 그냥 출력하면 안 된다고 했으니 printf문만 가지고 하는건 당연히 해결책이 아닙니다
2) 면접에서 실제로 면접관과 이야기하며 푸는 거라면 그 때 조건을 추론해가며 문제를 구체화하는 게 좋은 평가를 받는 길입니다. 현재 주어진 정보내에서는 가장 간단하게 출력하는 것부터 시작하는게 바른 풀이법이죠.
3) 임의의 n에 대해 동작하는 방식은 Rebel님이 만들어주셨습니다. 입력만 받게 수정하면 Rebel님의 코드가 그렇게 동작하죠.
꿀호떡a
13/04/24 19:27
수정 아이콘

알고리즘 설계의 기본은 적당한 범위의 입력에 대해 모두 잘 동작하도록 설계하는 것입니다. Rebel님의 코드는 인정합니다만, 다른 코드는 그런 관점에서는 문제의 답으로는 부적절합니다.

물론 실제 면접이었다면 대화를 통해 해결하는 것이 바람직하겠습니다만, 그렇지 않은 상황이면 더 있을 법하고 실력 향상에 도움이 되는 가정을 골라야겠죠.
13/04/24 13:20
수정 아이콘
13/04/24 13:41
수정 아이콘
제 생각엔 이 방법이 가장 좋군요.
array 하나를 만들고, 그것을 적절히 변형 해 가면서 출력하기.
꿀호떡a
13/04/24 19:28
수정 아이콘
제가 말씀드렸던 '미리'는 컴파일 타임입니다. 입력을 받고 Generation하는 솔루션은 좋은 솔루션이죠!
피자21
13/04/24 13:24
수정 아이콘
다양한 답이 나오는걸 보니..
정답이 있는 문제라기보다는 해법을 보면서 지원자를 평가하기에 나름 적절한 문제라는 생각이 드네요.
제 솔루션입니다.
http://codepad.org/gvgLnMFO
13/04/24 13:31
수정 아이콘
두 개의 array 를 만드시고, 하나에는 빈칸들, 나머지 하나에는 '*' 들을 채웁니다. (N) 만큼.
그리고 for 문 2개를 만드시고, 첫번째 for 에서는 * 의 개수를 줄이면서 출력.
두 번째 for 에서는 빈칸 개수는 줄이고, * 의 개수는 늘리면서 출력.
끝.
13/04/24 13:35
수정 아이콘
소스는 여기에
http://baboc.tistory.com/245
Lucky-Strike
13/04/24 14:37
수정 아이콘
헉... 자고 일어난 사이에 엄청난 수의 댓글이 달렸네요; 댓글 주신 분들 감사합니다.
목록 삭게로! 맨위로
번호 제목 이름 날짜 조회
24622 [질문] 동영상 인코딩 관련 질문 드리겠습니다. 구라타812 14/01/26 812
23645 [질문] PHP 입문서 추천 부탁드립니다. [3] 안산소도둑2156 14/01/14 2156
23250 [질문] 윈도우 태블릿 질문드려요 [4] 이든1261 14/01/09 1261
18377 [질문] 유투브 영상 보고 싶은데 볼수가 없어요 ㅜㅜ [2] 갈색시티관장992 13/11/13 992
15741 [질문] 개인 홈페이지 제작관련.. [6] 치탄다 에루1168 13/10/15 1168
14772 [질문] C언어 질문드릴게요..ㅠㅠ [16] 골수KT팬3699 13/10/04 3699
14309 [질문] 코딩 문제입니다 ^^ [2] 삭제됨1229 13/09/28 1229
12012 [질문] PC 견적 질문입니다. [7] 항즐이1665 13/08/31 1665
2934 [질문] C언어 질문입니다. [7] Insomniaa1350 13/05/14 1350
2899 [질문] 로지스틱 회귀분석에 대한 질문입니다. [2] 플토만세1791 13/05/13 1791
1478 [질문] [C언어]삼각형 찍기 질문입니다. [17] Lucky-Strike5944 13/04/24 5944
1462 [질문] 노트북 추천 부탁드립니다. [6] 제로스1259 13/04/23 1259
1273 [질문] [프로그래밍]별표 출력 질문입니다. [7] Lucky-Strike1790 13/04/21 1790
761 [질문] c++ release debug질문입니다. [7] 뇌업드래군2098 13/04/13 2098
115 [질문] 코딩에 대해 전혀 모르는 문외한이 개인 목적으로 익히려면 어떻게 하는 게 좋은지요...? [18] nexon2268 13/04/04 2268
목록 이전 다음
댓글

+ : 최근 1시간내에 달린 댓글
+ : 최근 2시간내에 달린 댓글
맨 위로