별 찍기

위키백과, 우리 모두의 백과사전.

별 찍기 문제아스테리스크(*) 등의 별표를 출력해 특정한 모양을 만들어내는 문제로, 주로 프로그래밍 입문자에게 제어문과 배열을 접하게 하기 위한 교육용 과제로 사용된다. 보통 콘솔 환경에서 순환문을 통해 직접 별표를 출력하거나 배열을 조작한 후 순환문으로 출력하는 등의 방법이 사용되며, 이 과정을 통해 입문자들은 변수, 제어문 및 배열 등을 직접 다루어보게 된다.

학원이나 대학교에서 신입생을 위한 과제로 출제되며, 일반적으로 기본적인 별 찍기 문제는 다음의 출력을 만들어낼 것을 요구한다.

Result :
*
**
***
****
*****

위 피라미드형은 가장 간단하고 난이도가 낮은 문제이다. 이 외에는 나비형이나 다이아몬드형 등의 응용 문제들이 있으며 해법도 여러 가지가 존재한다.

신학기에 위 문제를 처음 접하는 많은 대학생들이 프로그래밍 포럼에 찾아가 이 문제에 관한 질문을 올려, 신학기엔 많은 포럼들의 게시물 다수가 별 찍기 질문글들로 채워지곤 한다. 여러 포럼에서는 단순히 문제의 해답만을 요구하는 학생들에 대해서 불성실하다는 이유로 부정적인 입장을 보인다.

프로그래밍 커뮤니티 중 하나인 디시인사이드 프로그래밍 갤러리에서는 "새싹밟기"라는 제목으로 일반적으로는 생각하지 못했던 창의적인 별 찍기, 다이아몬드, 전문 별 찍기 솔루션 등이 올라오는 등 여러 가지 방법의 별 찍기 프로그램을 등록하는 것이 하나의 유행이 되기도 했다.

별 찍기에 대한 일반적 접근[편집]

일반적인 별 찍기 문제에 대한 접근법으로는 별표를 모니터에 찍을 수 있는 함수와 제어문을 사용하여 모니터 좌측 상단에서 순차적으로 찍어내리는 방법을 사용한다. 이는 일반적으로 출력이 좌측 상단에서부터 시작되기 때문이다. 이에 대한 일반적인 C 언어의 코드는 다음과 같다. 사용자에 따라 일부 코드에 차이가 있을 수 있음을 밝혀둔다.

#include <stdio.h>

int main(int argc, char *argv[])
{
    int i, j;

    for(i = 0; i < 5; i++)
    {
        for(j = 0; j <= i; j++)
            putchar('*');
        putchar('\n');
    }

    return 0;
}

그러나 삼각형의 모양이 바뀌어 좌측에 공백이 필요한 경우 일반적으로 " "(공백, 스페이스) 문자를 같이 이용하여 별 찍기 문제를 해결한다. 대표적인 예로는 정삼각형 출력이나 다이아몬드 출력 등이 있다. 이 이외에 별을 화면 중앙이나 그 외 임의의 위치에 출력해야 하는 문제가 존재하기도 한다. 이 경우 일반적으로 출력 커서의 위치를 옮기는 명령을 사용한다. 출력해야 할 도형이 복잡할 경우 - 특히 수학적 도형이나 규칙없는 그림 같은 경우 - 배열을 사용하여 그 정보를 넣은 후 제어문을 통해 배열을 읽어 별을 출력하기도 한다.

이 밖에도 별 찍기 문제의 경우 제어문의 심층적 활용이나 아스키 코드의 활용, 재귀함수의 이해 등 여러 분야의 예제로 사용되고 있으며 어떤 경우 디자인 패턴에 관한 예제로 사용되기도 한다.

별 찍기에 대한 비 일반적 접근[편집]

별 찍기 문제는 일반적으로 위와 같은 형태의 기본 문제가 출제되지만 위에서 언급했듯이 경우에 따라서는 모양을 달리 하는 문제, 제어문의 사용 횟수를 제한하는 문제, 디자인 패턴을 통한 문제등이 출제되기도 한다. 이런 경우 방금 위에서 언급했던 공백 문자의 사용, 커서 이동 함수 이외에도 여러 가지 기타 지식이 필요하다. 이것은 문제의 내용과 필요성에 의해 달라지며 개인의 응용력이 드러나는 부분이기도 하다.