:: 게시판
:: 이전 게시판
|
- PGR21 관련된 질문 및 건의는 [건의 게시판]을 이용바랍니다.
- (2013년 3월 이전) 오래된 질문글은 [이전 질문 게시판]에 있습니다. 통합 규정을 준수해 주십시오. (2015.12.25.)
통합규정 1.3 이용안내 인용"Pgr은 '명문화된 삭제규정'이 반드시 필요하지 않은 분을 환영합니다.법 없이도 사는 사람, 남에게 상처를 주지 않으면서 같이 이야기 나눌 수 있는 분이면 좋겠습니다."
13/04/24 04:35
1. 딱 8줄에 저만큼만 찍는거라면 2차원 배열을 선언하고 값을 미리 넣어놓은 후에 이중 for문으로 찍으면 되겠네요.
2. 임의의 입력이 들어온다면.. for문 하나로 별찍는 방법이 있습니다. 그 방법을 이용하고, 반 갈라서 윗단과 아랫단에 각각 하나의 for문을 쓰면 되겠네요. printf에서 커서의 위치를 변경하는 방법이 있으니 이를 활용하면 될거 같습니다. 3. 조건문의 범위가 단순히 if-else 인지는 모르겠는데, if-else만 해당되는거라면 매크로함수를 이용해보세요.
13/04/24 04:45
1번도 생각을 해봤으나 출제자의 의도와 다른것 같아서 잠시 킵해뒀습니다. 알려주신 다른 방법을 이용해봐야겠네요. 늦은 시간에 답변 주셔서 감사합니다.
13/04/24 06:25
이걸어쩌면좋아 님이 말하신 1,2번의 방법은 출제자가 의도한 방법이 아닐거같습니다
그리고 조건문 없이 반복문 2개로 저걸 찍는건 불가능합니다. 혹시 문제조건이 2중 반복문까지만 허용한다는거 아닌지요? 2개'만' 사용해야한다면 매크로를 쓸수 밖에 없습니다
13/04/24 06:43
https://gist.github.com/hodduc/5447631 이런 건 어떤가요?
흠, 근데 조건문을 사용하지 말라는 게 썩 좋은 문제 같지는 않네요. 힌트를 원하시면 링크는 열지 마시고, 1.bitwise operator만 가지고 min이나 max를 만들 수 있는 것 2.printf에서 %*s를 이용하면 width를 조절할 수 있는 것 을 이용하시면 되어요.
13/04/24 09:05
지난 번 말씀드렸었는데, 아스키코드까지 안 가고 출력할 개수의 배열과 문자의 배열 두 개를 가지고 for loop 두 개로 할 수 있습니다. 파이썬이면 하나만으로도 되겠죠.
http://codepad.org/Mv9lXSNM 참고하세요.
13/04/24 09:42
위에 하나 밑에 하나씩 나눠서 반복문 2개로 조건문 없이 처리 가능합니다. 그냥 char array 선언하고 출력 내용을 바꾸는 식으로 하시면 됩니다.
http://codepad.org/CHpYa4d1
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"); ] 선 두개 그어서 각 점이 어느 방향에 위치했는지 계산하면 깔끔하죠. (댓글에 중괄호가 안써지네요. 대괄호로 썼습니다.)
13/04/24 12:46
에이, 임의의 N에 대해 동작하지 않으면 반칙이죠. 그럼 반복문이 아니라 정말 printf만 가지고 해결해도 되니까.. 만약 그걸 의도하고 낸거면 출제자를 까도 되고요.
출제 의도상 임의의 N에 대해 동작해야 하지 않나 싶습니다. 즉 Array에 별이던 숫자던 미리 넣는 방식으로는 당연히 해결이 안 되죠.
13/04/24 13:17
1) 문제의 조건에 그냥 출력하면 안 된다고 했으니 printf문만 가지고 하는건 당연히 해결책이 아닙니다
2) 면접에서 실제로 면접관과 이야기하며 푸는 거라면 그 때 조건을 추론해가며 문제를 구체화하는 게 좋은 평가를 받는 길입니다. 현재 주어진 정보내에서는 가장 간단하게 출력하는 것부터 시작하는게 바른 풀이법이죠. 3) 임의의 n에 대해 동작하는 방식은 Rebel님이 만들어주셨습니다. 입력만 받게 수정하면 Rebel님의 코드가 그렇게 동작하죠.
13/04/24 19:27
알고리즘 설계의 기본은 적당한 범위의 입력에 대해 모두 잘 동작하도록 설계하는 것입니다. Rebel님의 코드는 인정합니다만, 다른 코드는 그런 관점에서는 문제의 답으로는 부적절합니다. 물론 실제 면접이었다면 대화를 통해 해결하는 것이 바람직하겠습니다만, 그렇지 않은 상황이면 더 있을 법하고 실력 향상에 도움이 되는 가정을 골라야겠죠.
13/04/24 13:24
다양한 답이 나오는걸 보니..
정답이 있는 문제라기보다는 해법을 보면서 지원자를 평가하기에 나름 적절한 문제라는 생각이 드네요. 제 솔루션입니다. http://codepad.org/gvgLnMFO
13/04/24 13:31
두 개의 array 를 만드시고, 하나에는 빈칸들, 나머지 하나에는 '*' 들을 채웁니다. (N) 만큼.
그리고 for 문 2개를 만드시고, 첫번째 for 에서는 * 의 개수를 줄이면서 출력. 두 번째 for 에서는 빈칸 개수는 줄이고, * 의 개수는 늘리면서 출력. 끝.
|