Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 섬연결하기
- 프림알고리즘
- 프로그래머스
- 그래프탐색
- 다익스트라
- 파이썬
- 백준
- [1차]캐시
- 이모티콘할인행사
- 파괴되지않은건물
- 17404
- 두큐합같게만들기
- 자물쇠와열쇠
- DP
- 알고리즘
- 최단경로
- 큐
- DFS
- 징검다리건너기
- 최소스패닝트리
- 위상정렬
- 도넛과막대그래프
- BFS
- 사이클게임
- RGB거리2
- javascript
- 트리의지름
- 거리두기확인하기
- 벽부수고이동하기
- 구현
Archives
- Today
- Total
블로그 이름 뭐로 하지
[알고리즘/파이썬] 백준 2248 - 별 찍기 11 본문
문제
https://www.acmicpc.net/problem/2448
2448번: 별 찍기 - 11
첫째 줄에 N이 주어진다. N은 항상 3×2k 수이다. (3, 6, 12, 24, 48, ...) (0 ≤ k ≤ 10, k는 정수)
www.acmicpc.net
풀이
난 이런 류의 문제가 참 어렵다 ^ __ ^ ... 머리를 굴려야하는데 머리가 안 굴러가서 그른가..
규칙은 n=3일때 만들었던 삼각형이 n=6일때 양쪽에 추가되고, n=6일때 만들었던 트리가 n=12일때 양쪽에 추가되는 식으로 발전한다는 것이다.
사실 거기까진 오케이였는데 양쪽에 공백을 넣는걸 어떻게 넣어야하나..ㅠㅠ 이 부분에서 해결이 안 됐다.
다른 분 풀이를 보니 우선 n=3일때 맨밑은 5칸, n=6일때 맨밑이 11칸이니까 우선 2*N-1 만큼 크기로 공백 그래프를 만든 후 별찍기를 추가해주는 방식으로 해줬더라..!
참 어렵다 ㅠ
코드
n = int(input())
graph = [[" ", " ", "*", " ", " "], [" ", "*", " ", "*", " "], ["*", "*", "*", "*", "*"]]
def recursive(N, before):
after = [[" "] * (2 * 2 * N - 1) for _ in range(2 * N)]
for i in range(N):
after[i][N:N+2*N-1] = before[i]
k = 0
for i in range(N, 2 * N):
# after[i][:2*N] 의 길이가 before[k]보다 1만큼 크기 때문에 가운데에 공백이 자연스레 생긴다.
after[i][:2*N] = before[k]
after[i][2 * N:2 * N+len(before[k])] = before[k]
k += 1
if 2 * N == n:
return after
return recursive(2 * N, after)
if n == 3:
result = graph
else:
result = recursive(3, graph)
for i in result:
print("".join(i))
'알고리즘' 카테고리의 다른 글
[알고리즘/파이썬] 프로그래머스 - 파괴되지 않은 건물 (다시 풀기) (0) | 2024.01.15 |
---|---|
[알고리즘/파이썬] 프로그래머스 - 네트워크 (0) | 2024.01.15 |
[알고리즘/파이썬] 백준 2206 - 벽 부수고 이동하기 (1) | 2024.01.14 |
[알고리즘/파이썬] 프로그래머스 - 자물쇠와 열쇠 (2) | 2024.01.13 |
[알고리즘/파이썬] 프로그래머스 - 이중우선순위큐 (1) | 2024.01.13 |