61~64번에서 별을 열심히 찍었었다. 이제 별 찍기 예제의 마지막 X 모양 별 찍기를 해보려고 한다.
2023.08.18 - [BOOK/파이썬 문제풀이 100] - 62. 대각선 별 찍기
62. 대각선 별 찍기
별 찍기의 응용은 참 많은 것 같다. 61번에서 기초적인 별 찍기를 했으니 살짝 응용한 대각선 별 찍기도 해보자. 2023.08.18 - [BOOK/파이썬 문제풀이 100] - 61. 삼각형 별 찍기 I 61. 삼각형 별 찍기 I 이
jijibae.tistory.com
문제
다음과 같이 *를 출력하는 코드를 for 반복문을 사용해 작성하세요.
접근
총 행의 수는 10이므로 바깥 for문의 반복 횟수는 10번이다.
열의 처음부터 별까지의 빈칸의 수는 1행 => 0 , 2행 => 1, ... ,5행 => 4, 6행 =>4, 7행 => 3, ... , 10행 =>0이므로
+1씩 등차수열을 띄고, 7행부터 -1씩 등차수열을 띄니 조건문을 달아야 한다고 생각했다.
대칭이 많이 보이므로, 한쪽만 잘 구현해놓으면 반대쪽은 쉽게 할 수 있을 것이다.
j = 1
for i in range(10):
if i == 5 : i = 4
if i > 5:
i = i - (2*j+1)
j += 1
print(' ' * i, end="")
print('*' * 1 , end="")
print(' ' * (8-2*i), end="")
print('*' * 1, end="")
print(' ' * i,)
위 풀이는 이중 for문을 사용하지 않고.. 꾸역꾸역 어떻게든 해보겠다는 나의 의지가 잘 담겨 있다..
결과는 동일하게 나오지만 배울만한 내용은 없어 더 고민해보았다.
별이 언제 찍힐까?
62번의 대각선 별 찍기를 기억해보면 행과 열의 인덱스가 같은 경우 별이 찍힌다.
이 예제의 X 문자중 \ 부분은 행,열의 인덱스가 같은 부분이다.
그럼 / 부분은 어떻게 찍을 수 있을까??
바로 인덱스의 합이다. 행과 열의 인덱스의 합이 9일 때 별이 찍힌다고 생각할 수 있다.
i + j 의 값이 9일 때 별이 찍힌다는 규칙을 알면 이 문제를 쉽게 풀 수 있다.
for i in range(10):
for j in range(10):
if i == j or i + j == 9:
print('*', end="")
else:
print(' ', end="")
print()
결과
인덱스의 합도 고려할 수 있는 좋은 문제였다고 생각한다.
'✍🏻Language & FrameWork > 파이썬 문제풀이 100' 카테고리의 다른 글
64. 삼각형 별 찍기 III (0) | 2023.08.21 |
---|---|
63. 삼각형 별 찍기 II (0) | 2023.08.21 |
62. 대각선 별 찍기 (0) | 2023.08.18 |
61. 삼각형 별 찍기 I (0) | 2023.08.18 |
46.'도, 개, 걸, 윷, 모' 윷놀이(count) (0) | 2023.08.18 |