밑의 링크는 CodeUp에서의 문제 링크입니다.
문제는 링크를 통해서 직접 봐주시길 바랍니다.
주의해야 할 점
1. readline과 int나 float를 사용하는 입력 방식
readline을 사용해서 입력할 때는 맨 끝에 \n이 붙어서 입력됩니다.
하지만, 입력한 값을 int나 float으로 처리해 정수, 실수형으로 만들어 줄 때는
굳이 \n을 떼기 위해 rstrip을 사용할 필요가 없습니다.
숫자 형태를 만들어줄 때 자동으로 사라집니다.
num = int(sys.stdin.readline())
2. 불필요한 공백을 출력하면 표현 에러를 유발
문제에서 도움말을 읽어보면 '불필요한 공백을 출력하면 표현 에러를 유발합니다.'라고 나와있습니다.
삼각형의 한 줄에서 (공백 부분)(별 부분) 다음에 또 공백을 출력하면
표현 에러 결과가 나오는 듯합니다.
문제를 그렇게 풀 이유도 없어 보이므로 코드업에서 틀렸다고 판단하는 것이 저도 맞다고 봅니다.
예제 설명
1. 첫 번째 예제
- 입력
5
- 출력
*
***
*****
- 설명
입력한 n은 5입니다.
이 n은 삼각형의 마지막 줄에서 출력할 별의 개수이므로
규칙에 맞게 별의 개수를 1 → 3 → 5개씩, 공백의 개수를 2 → 1 → 0개씩 출력해
*
***
*****
모양으로 만들어줍니다.
생각한 풀이 과정
3부터 99까지의 홀수인 n을 입력하고 int형으로 변환합니다.
n = int(stdin.readline())
- 반복문 시작
1부터 n까지 2를 건너뛰면서 반복합니다.
for num in range(1, n + 1, 2):
삼각형 모양을 만들어주기 위해 먼저 공백을 출력합니다.
공백을 (n - 현재 숫자) // 2만큼 출력하고, 다음 줄로 내리지 않습니다.
print(' ' * ((n - num) // 2), end='')
별 *들을 현재 숫자만큼 출력합니다.
print('*' * num)
- 반복문 끝
제출한 파이썬 코드
# readline을 사용하기 위해 import합니다.
from sys import stdin
# n을 입력합니다.
# int형으로 변환합니다.
# n은 3부터 99까지의 홀수 중 하나입니다.
n = int(stdin.readline())
# 1부터 n까지 2를 건너뛰면서 반복합니다.
for num in range(1, n + 1, 2):
# 삼각형 모양을 만들어주기 위해 먼저 공백을 출력합니다.
# 공백을 (n - 현재 숫자) // 2만큼 출력하고, 다음 줄로 내리지 않습니다.
print(' ' * ((n - num) // 2), end='')
# 별 *들을 현재 숫자만큼 출력합니다.
print('*' * num)
제출 결과
느낀 점
별들로 삼각형이나 사각형 모양을 출력하는 문제들을 풀어보면
수학적 센스가 있다면 더 쉽게 풀 수 있는 것들이 많았습니다.
이번 문제도 풀면서 그런 느낌이 들더라고요.
댓글