우재남씨가 지은 "파이썬 for Beginner"에 나오는 [프로그램 1] 다이어몬드 출력 문제를 풀어본다.

문제를 분석해 본다. "  "(스페이스)를 출력하는 부분과 "*"(다이어몬드)를 출력하는 부분으로 나누어서 다음과 같이 i가 0에서 부터 8까지 변경될 경우 그에 따른 변화를 테이블로 작성해 보았다.

i 스페이스 from 스페이스 to 다이어몬드 from 다이어몬든 to 비고
0 0 0 3 4-i-1 4 4-i 4 4+i  
1 0 0 2 4-i-1 3 4-i 5 4+i  
2 0 0 1 4-i-1 2 4-i 6 4+i  
3 0 0 0 4-i-1 1 4-i 7 4+i  
4 -1 4-i-1 -1 4-i-1 0 4-i 8 4+i  
5 0 0 0 i-4-1 1 -(4-i) 7 12-i  
6 0 0 1 i-4-1 2 -(4-i) 6 12-i  
7 0 0 2 i-4-1 3 -(4-i) 5 12-i  
8 0 0 3 i-4-1 4 -(4-i) 4 12-i  

다이어몬드를 출력하는 특성상 출력하는 부분이 i가 0~4까지는 4-i부터 4+i까지 출력이 되어야 하고, i가 5~8까지는 -(4-i)부터 12-i까지 출력이 되어야 한다.

이를 스프레드 시트를 사용하여 표현하면 다음과 같이 나타낼 수 있다.

위의 그래프는 별을 출력하는 시작과 끝을 나타내는 것이다. 첫번째(i = 0)부터 다섯번째(i = 4)까지는 시작은 -i + 4로 나타낼 수 있고, 끝은 i + 4로 나타낼 수 있다. 또 다섯번째(i = 4)부터 아홉번째(i = 8)까지는 시작은 i - 4이고 끝은 -i + 12이다.

이는 절대값을 사용하면 최소값은 | i - 4 |, 최대값은 - | i - 4 | + 8로 나타낼 수 있다. 이를 그래프를 나타내는 절대값과  이동, 대칭으로 나타내면 다음 그림과 같다.

y = | x |를 나타내는 그래프를 오른쪽으로 4만큼 이동시키면 시작을 나타내는 수식(함수 y = | x - 4 |)이 되고, 이를 x축으로 대칭을 시켜서 y = - | x - 4 |로 변경하고 또 y축으로 8만큼 이동시키면 끝을 나타내는 수식(함수 y = - | x - 4 | + 8이 된다.

따라서 다이어몬드를 출력하는 프로그램은 다음과 같이 프로그램할 수 있다.

먼저 0~8까지 줄을 나타내는 반복문을 사용하고 다시 스페이스를 출력하는 부분과 다이어먼드를 출력하는 부분으로 나눌 수 있으며, 다이어몬드를 출력하는 시작과 끝을 위의 수식을 사용하여 나타내면 된다.

for i in range(0, 9, 1):
    k = abs(i - 4)
    l = - abs(i - 4) + 8
    for j in range(0, l + 1, 1):
        if j >= k and j <= l:
            print('\u2605', end='')
        else:
            print("  ", end='')
    print("")

이를 실행하면 다음과 같이 다이어몬드를 출력하는 것을 알 수 있다.

하나의 문제를 푸는 것이 이렇게 복잡하고, 이를 설명하는 것이 또한 복잡하다. 또 이렇게 설명을 한다고 했을 때 이해를 잘 할 수 있는지도 궁금하다. 조금더 이해가 될 수 있도록 작성을 해 보았다.

'Python' 카테고리의 다른 글

python에서 MySQL 연동하여 테이블 검색  (0) 2023.01.17
python mysql 연동  (0) 2023.01.17
Posted by 세상을 살아가는 사람
,