본문 바로가기

algorithm/백준알고리즘

[백준알고리즘] 2448번: 별 찍기 - 11 -Python

728x90

[백준알고리즘] 2448번: 별 찍기 - 11 -Python

https://www.acmicpc.net/problem/2448

 

2448번: 별 찍기 - 11

첫째 줄에 N이 주어진다. N은 항상 3×2k 수이다. (3, 6, 12, 24, 48, ...) (k ≤ 10)

www.acmicpc.net

와;; 난해했다.. 사실 코드는 그럭저럭 바로 짜기 시작했었는데 이것저것 걸리는 것들이 많았다..

 

우선 출력시 *의 끝부분까지만 출력하는 것이 아니라 * 뒤에도 빈 공간을 출력해주어야 했다. 그리고 초기 테이블에 이상한 값이 끼었었는지 똑같은 코드인데도 계속 100퍼센트에서 틀리길래 table 생성 부분만 조금 손봤더니 정상적으로 통과했다.

 

나는 분할정복 개념으로 문제를 풀었다. 큰 삼각형에서 작은 서브 삼각형 세 부분으로 나눠서 반복하도록 해주었다. 이때 가운데 뒤집힌 삼각형 모양으로 빈칸을 뚫어주는 부분도 작성해주었다.

 

나는 계속 지우는 방향으로 다른 사람들과 좀 다르게 푼 것 같은데 다른 방법으로 더 풀어봐야겠다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
def rm(i, j, h):
    if h == 3:
        table[i+1][j+2= ' '
        return
 
    new_h = h//2
    blank = 5 * (h//6+ 1 * (h//6-1)
    nj = j + new_h
    for ni in range(i + new_h, i + h):
        for b in range(blank):
            table[ni][nj+b] = ' '
        blank -= 2
        nj += 1
 
    rm(i, j + new_h, new_h)
    rm(i + new_h, j, new_h)
    rm(i + new_h, j + h, new_h)
 
= int(input())
table = [[' '* (n-i-1+ ['*'* (2*+ 1+ [' '* (n-i-1for i in range(n)]
rm(00, n)
for t in table:
    print(''.join(t))

 

잘못된 점이나 부족한 점 지적해주시면 감사하겠습니다

728x90