일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 모의해킹
- 알고리즘
- 토이프로젝트
- 이클립스
- 문제풀이
- 오라클
- SQL 문법
- 스프링
- 엘라스틱서치
- 자바
- 스파크
- SQL
- 데이터프로그래밍
- c언어
- 코딩테스트
- 리눅스마스터 2급 2차
- 파이썬
- 스프링부트
- 해킹실습
- 문법
- 프로그래머스
- 데이터베이스
- 위클리챌린지
- 프로그래밍
- 빅데이터
- SQL 정리
- MySQL
- 필기
- 백준
- 기초
- Today
- Total
개발일기
백준 별찍기 파이썬 문제풀이 - 2444, 2445, 2446 본문
문제링크 - https://www.acmicpc.net/problem/2444
2444번: 별 찍기 - 7
첫째 줄부터 2×N-1번째 줄까지 차례대로 별을 출력한다.
www.acmicpc.net
# 문제풀이
1
2
3
4
5
6
7
8
9
|
n = 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
|
n = 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-1, 0, -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
|
n = 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 |
'알고리즘 문제풀이 > 백준' 카테고리의 다른 글
백준 11720번 파이썬 문제풀이 : 숫자의 합 (0) | 2021.09.04 |
---|---|
백준 1672번 파이썬 풀이 : DNA 해독 (0) | 2021.09.03 |
백준 별찍기 파이썬 문제풀이 - 2440, 2441, 2442, 2443 (0) | 2021.09.01 |
백준 별찍기 문제풀이 - 2438, 2439 (2) | 2021.08.31 |
백준 1075번 파이썬 문제풀이 : 나누기 (0) | 2021.08.30 |