Recent Posts
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 |
Tags
- 달인막창
- PersistenceContext
- vfr video
- addhooks
- 깡돼후
- mp4fpsmod
- PytestPluginManager
- kotlin
- VARCHAR (1)
- preemption #
- JanusWebRTC
- JanusWebRTCGateway
- table not found
- python
- 티스토리챌린지
- pytest
- 코루틴 컨텍스트
- 개성국밥
- 자원부족
- 헥사고날아키텍처 #육각형아키텍처 #유스케이스
- taint
- JanusGateway
- Value too long for column
- JanusWebRTCServer
- Spring Batch
- 코루틴 빌더
- tolerated
- terminal
- 오블완
- 겨울 부산
Archives
너와 나의 스토리
(BOJ) 9934 완전 이진 트리 본문
반응형
문제: https://www.acmicpc.net/problem/9934
문제 풀이:
위에서부터 왼쪽에서 오른쪽으로 1번부터 순서를 매긴다고 하자.
깊이가 k일 때, 마지막 레벨의 번호는 $2^{k-1}$≤N≤$2^{k}-1$이다.
l: $2^{k-1}$
r: $2^{k}-1$
pos: 1 (도착 순서)
이라고 하자.
1. 왼쪽 노드를 방문 안했고 현재 l보다 작다면(아직 마지막 층이 아니라면) -> 왼쪽 노드로 이동
2. 왼쪽 노드를 방문 했고 현재 자신의 위치에서 방문한 적이 없으면
-> 입력 받은 순서대로 트리의 해당 위치에 값을 넣어준다.
3. 현재 위치를 방문했고, 오른쪽 노드는 방문 하지 않았는데 현재 l보다 작다면 -> 오른쪽 노드로 이동
소스 코드:
int h,l,r,arr[1026],res[1026],pos=1;
bool visit[1026];
void func(int cur) {
if (!visit[cur*2]&&cur< l) func(cur * 2);
if (!visit[cur] && cur >= l && cur <= r) {
visit[cur] = true;
res[cur] = arr[pos++];
}
if (!visit[cur]&&visit[cur*2]) {
visit[cur] = true;
res[cur] = arr[pos++];
}
if (!visit[cur * 2 + 1] &&cur<l) func(cur * 2 + 1);
}
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
cin >> h;
for (int i = 1; i < pow(2, h); i++) {
cin >> arr[i];
}
l = pow(2, h - 1);
r = pow(2, h) - 1;
func(1);
pos = 1;
for (int i = 0; i < h; i++) {
for (int j = 0; j < pow(2, i); j++) {
cout << res[pos++]<<" ";
}
cout << '\n';
}
return 0;
}
소스 코드:
반응형
'Algorithm > 기타' 카테고리의 다른 글
[BOJ] 16287 Parcel (0) | 2019.09.27 |
---|---|
[SW] 7829 보물왕 태혁 (D4) (0) | 2019.09.09 |
(BOJ) 1965 상자 넣기 (0) | 2019.07.18 |
(BOJ) 15976 XCorr (테스트 케이스) (0) | 2019.07.14 |
(BOJ) 15975 화살표 그리기 (0) | 2019.07.14 |
Comments