오류 및 알고리즘정리본

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)

이렇게 재귀를 이용하여서도 별 찍기 문제를 풀 수 있다.