문제
[다이아 별 찍기]
풀러 가기
가로 세로 2n-1 크기에 해당하는 격자에 다이아몬드 모양을 * 로 그리는 코드를 작성해보세요.
규칙은 다음과 같습니다.
n = 2
*
***
*
n = 3
*
***
*****
***
*
입력 형식
자연수 n이 주어집니다.
- 1 ≤ n ≤ 100
출력 형식
공백과 * 을 이용하여 가로 세로 2n-1 크기의 격자에 다이아몬드 모양을 출력합니다.
Constraints:
시간 제한: 1000ms
메모리 제한: 80MB
입출력 예제
예제 1
입력:
3
출력:
*
***
*****
***
*
풀이과정
별 찍기는 어렵게 생각하지 않아도 된다!!!
1) 수학을 풀듯이 별과 공백의 print규칙을 먼저 찾고(n을 이용해서)
2) 이를 for문으로 구현 하면 된다
여기서 팁은 공백도 print해줘야 한다는것이다!! 규칙에 넣어 생각해 보는것이다
1) 규칙찾기
별을 보면 별의 수가 늘어났다가 줄어든다.
그러므로,
-
늘어날 때
* *** *****
-
줄어들 때
*** *
이 2개로 먼저 판단을 해 보겠다
늘어날 때
행 단위로 규칙을 찾아 프린트 할 것이기 때문에 각 행에 j라는 인덱스를 붙여보겠다
(공백을 x라고 두면 각 열의 규칙은)
x는 n-1에서 부터 하나씩 줄고 있고,
- 은 1에서 부터 시작하여 2개씩 늘고 있다
그러므로 각 열의 구성은
- x * (n-j) + 별* {1+(j-1)* 2} 이다.
- 그리고 이 열이 끝나면 행을 바꿔주기 위해
print("")
를 출력해야 한다.
이를 구현하면,
n= int(input())
for j in range(1,n+1):
print(" "*(n-j),end="")
print("*"*(1+(j-1)*2),end="")
print("")
줄어들 떄
이건 위의 코드를 가져다 쓰면 된다.
위의 코드의 j=1이 j=5 이렇게 대칭이기 때문에 j를 뒤로 가져가면서 위의 코드를 가져오면 된다
이를 구현하면,
for j in range(n,0,-1):
print(" "*(n-j+1),end="")
print("*"*(1+(j-2)*2),end="")
print("")
구현
n= int(input())
for j in range(1,n+1):
print(" "*(n-j),end="")
print("*"*(1+(j-1)*2),end="")
print("")
for j in range(n,0,-1):
print(" "*(n-j+1),end="")
print("*"*(1+(j-2)*2),end="")
print("")
결과
쨔쨘