오류 및 알고리즘정리본
18. 백준 알고리즘 개, 별찍기 2
츄98
2023. 5. 19. 21:44
오늘 푼 문제들의 개념과 풀이를 정리해보도록 하자~
1. 개 (10172번)

# 백준 개 문제
print('''|\_/|
|q p| /}
( 0 )"""\\
|"^"` |
||_/=\\\__|''')""" """ 또는 ''' '''을 사용하면, 개행(줄바꿈) 문자 없이도 줄바꿈이 가능하다.
중간에 """으로 출력되어야 하는 부분이 있기 때문에, ''' ''' 을 사용하여 코드를 완성하였다.
또한 역슬래쉬 \의 경우, print("\") 이렇게 하면 오류가 난다.
print("\\") 이렇게 했을 때, 역슬래쉬 \ 하나가 출력된다는 사실을 고려하여 코드를 작성해야 한다.
\: 역슬래시 기호를 단일로 사용할 경우 'escape'의 성격을 띄며 원래의 의미를 벗어나 새로운 기능을 하게 됨.
\n: 줄바꿈 기호.
\": 큰 따옴표를 그냥 쓰게 되면 다른 의미로 받아들여 큰 따옴표를 직접 쓸 때 역슬래시를 써줌.
\': 작은 따옴표 또한 큰 따옴표와 같다.
\\: 역슬래쉬 하나를 출력한다.
만약 ''' ''' 이 아니라 """ """을 사용하여 출력을 하고 싶을 경우,
중간에 있는 """ 을 \"\"\" 이렇게 바꿔줌으로써 코드를 완성할 수 있다.
# sol2
print("""|\_/|
|q p| /}
( 0 )\"\"\"\\
|"^"` |
||_/=\\\__|
""")
2. 별찍기 2 (2439번)

이 문제는 총 3가지 방법으로 풀이를 해보았다.
# 백준 별찍기2
import sys
input = sys.stdin.readline
n = int(input())
# sol1 그냥 풀어보기
for i in range(1,n+1):
print(' '*(n-i)+'*'*i)
# sol2 오른쪽 정렬
for i in range(n):
star = '*'*(i+1)
print(star.rjust(n))
# 전체 n에서 오른쪽 정렬을 하는 .rjust(n) 사용먼저 두 가지 방법에 대해서 설명을 해보자!!
나는 항상 백준 문제를 풀 때, 시간초과를 고려하여
import sys
input = sys.stdin.readline
n = int(input())이와 같은 세팅을 기본적으로 해놓고 시작한다. 이렇게 할 경우, 코드가 진행되는 시간을 줄일 수 있고, 시간초과가 거의 일어나지 않는다.
첫 번째 방법은, 첫번째 줄에 공백이 4칸, 별이 1칸 ... 마지막 줄에 별이 5칸이 되는 것을 이용하여 직접 코드를 작성한 것이다.
두 번째 방법도 비슷하지만, 이는 rjust(n) 이라는 오른쪽 정렬해주는 함수를 사용하여 더욱 간단하게 코드를 작성해보았다.
마지막 방법은 재귀를 이용한 방법이다.
# sol3 재귀 이용하기
def solution(n, x):
N = x
if n <= 1:
return n
# 공백은, N-n이 4, 3, 2, 1, 0
# 별은, n가 1, 2, 3, 4, 5 이렇게 되면 된다.
print(' '*(N-n)+'*'*solution(n-1, N))
return n
n = int(input())
solution(n+1, n+1)이렇게 재귀를 이용하여서도 별 찍기 문제를 풀 수 있다.