우재남씨가 지은 "파이썬 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 |