개발일기

백준 별찍기 파이썬 문제풀이 - 2444, 2445, 2446 본문

알고리즘 문제풀이/백준

백준 별찍기 파이썬 문제풀이 - 2444, 2445, 2446

한민기 2021. 9. 2. 19:44
반응형

문제링크 - https://www.acmicpc.net/problem/2444

 

2444번: 별 찍기 - 7

첫째 줄부터 2×N-1번째 줄까지 차례대로 별을 출력한다.

www.acmicpc.net

# 문제풀이

1
2
3
4
5
6
7
8
9
= int(input())
 
for i in range(n):
    print(" " * (-1 * i + n - 1), end='')
    print("*" * (2 * i + 1))
 
for j in range(n-1):
    print(" " * (j + 1), end='')
    print("*" * ((-1 * j + n - 2* 2 + 1))
cs

먼저 위 삼각형 5줄을 찍은 후 아래의 4줄을 찍는 방법으로 프로그래밍을 구현했다.

공백의 개수를 살펴보면 0번째 줄에는 4개, 1번째 줄에는 3개의 규칙을 가지고 있다. 여기서 4개는 입력 값 n - 1 이다.

그럼 ax + b = y 의 식에 x=0 y=4, x=1 y=3 을 대입 한 후 연립방정식을 사용하게 되면 b = 4, a = -1을 얻을 수 있다. 이때, 4는 n - 1 이었기 대문에 식을 풀어 쓰면 y = -1 * x + n - 1이 된다. 

 

아래 삼각형 4줄의 공백을 살펴 보면 0번째 줄에는 1개, 1번째 줄에는 2개의 규칙을 가지고 있어 j + 1 만큼만 출력하면 된다.

별의 개수를 살펴보면 0번째 줄은 7개, 1번째 줄은 5개의 규칙을 가지고 있다.

7개는 3 * 2 + 1, 9개는 2 * 2 + 1의 규칙으로 보아 n-2 * 2 + 1 인 것으로 보인다.

따라서 위와 같이 ax+b = y 에 식에 대입하여 (-x + n - 2) * 2 + 1의 규칙을 최종적으로 가지고 있다.

 

 

 

 

 

문제 링크 : https://www.acmicpc.net/problem/2445

 

2445번: 별 찍기 - 8

첫째 줄부터 2×N-1번째 줄까지 차례대로 별을 출력한다.

www.acmicpc.net

# 문제풀이

1
2
3
4
5
6
7
8
9
10
11
= int(input())
 
for i in range(n):
    print("*" * (i + 1), end='')
    print(" " * ((-2 * i) + (n * 2 - 2)), end='')
    print("*" * (i + 1))
 
for j in range(n-10-1):
    print("*" * j, end='')
    print(" " * ((-2 * j) + (n * 2)), end='')
    print("*" * j)
 
cs

해당 문제도 위의 문제와 동일하게 ax+b=y 의 식에 값 들을 대입하여 별의 개수와 공백의 개수를 구해 출력하면 된다.

 

 

 

문제 링크 : https://www.acmicpc.net/problem/2446

 

2446번: 별 찍기 - 9

첫째 줄부터 2×N-1번째 줄까지 차례대로 별을 출력한다.

www.acmicpc.net

# 문제풀이

1
2
3
4
5
6
7
8
9
= int(input())
 
for i in range(n):
    print(" " * i, end='')
    print("*" * ((-1 * i + n - 1* 2 + 1))
 
for j in range(n-1):
    print(" " * (-1 * j + n - 2), end='')
    print("*" * (2 * j + 3))
cs

 

 

 

 

 

 

 

반응형
Comments