본문 바로가기
Algorithm/Algorithm

겹치지 않는 3자리 수를 오름차순으로 출력하기

by OdOp 관리자 2023. 10. 16.
SMALL

이번에는 제목 그대로 겹치지 않는 3자리 수를 오름차순으로 차례로 출력해 보도록 하겠습니다. 

이때 3자리 수 또한 오름차순으로 되어 있어야 합니다. 즉, 012는 되는데 132는 안 되는 겁니다.

 

012, 013, 014, 015, 016, 017, 018, 019, 023, 024, ..., 089, 123, ...., 789

 

위와 같이 출력될 것입니다. 

그면 이번에는 while문으로 한 번 작성해 보죠. 

첫째 자리의 최댓값은 7이고 둘째 자리의 최댓값은 8이고 셋째 자리의 최댓값은 9입니다. 

각 자리의 최댓값을 이렇게 설정하면 되겠네요.

쉼표는 마지막에만 없으면 될 것 같으니 첫째 자리가 7이면 쉼표를 출력하면 안 되겠네요.

(789가 마지막 수이면서 첫째 자리가 7일 때의 수는 789밖에 없습니다. )

아래의 코드를 보시기에 앞서서 함수나 while문 그리고 write에 대해 아직은 잘 모르시는 분들은 아래의 링크들을 참고부탁드리겠습니다.

 

함수는 여기서...

https://hig0617.tistory.com/21

 

while문은 여기서...

https://hig0617.tistory.com/12

 

write는 여기서...

https://hig0617.tistory.com/47

 

모든 링크를 확인하시거나 혹은 c언어 함수와 while문에 아시는 분들은 아래 코드를 바로 보시죠.

#include <unistd.h>

void    print_ijz(char i, char j, char z)
{
    write(1, &i, 1);
    write(1, &j, 1);
    write(1, &z, 1);
    if (i != '7')
    {
        write(1, ",", 1);
        write(1, " ", 1);
    }
}

void    print_comb(void)
{
    char    i;
    char    j;
    char    z;

    i = '0';
    while (i <= '7')
    {
        j = i + 1;
        while (j <= '8')
        {
            z = j + 1;
            while (z <= '9')
            {
                print_ijz(i, j, z);
                z++;
            }
            j++;
        }
        i++;
    }
}

int main(void)
{
    print_comb();
    return 0;
}

print_comb는 알고리즘이 작성되어 있고, print_ijz는 출력을 담당해 주는 함수입니다. 

print_comb먼저 설명 드리도록 하겠습니다. 

첫째 자리를 i, 둘째 자리를 j, 셋째 자리를 z라고 설정을 하고 최댓값이 각각 7, 8, 9이므로 while문이 각각 7, 8, 9가 될 때까지 돌아야 하고 j와 z는 while문이 시작하기 전에 초기화를 해주어야 합니다. 초기화를 진행할 때에 무조건 앞의 값보다 1 커야 하기 때문에 j는 i + 1로 초기화를 진행하고 z는 j + 1로 초기화를 진행을 하였습니다. 

print_ijz를 설명드리겠습니다. 

출력을 담당해 줍니다. i, j, z를 출력을 해주고 i가 7이 아니면 ', '를 출력해 줍니다. 

LIST