Notice
Recent Posts
Recent Comments
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- 코드업
- 스프링 부트
- 클라우드 컴퓨팅
- 월미도
- 오일러프로젝트
- gcp
- 백준
- 카프카
- 프로그래밍문제
- aws
- springboot
- 스프링부트
- 쿠버네티스
- VPC
- Spring
- Spring Boot
- Docker
- Elasticsearch
- Apache Kafka
- DFS
- 로드밸런서
- 자료구조
- Kafka
- 인천여행
- Spring Data JPA
- JPA
- 스프링
- 알고리즘
- 클라우드
- 백트래킹
Archives
- Today
- Total
GW LABS
[HackerRank] Tree: Huffman Decoding 본문
자료구조에 익숙해지기 위해 HackerRank 문제들을 공부중이다. 그 중 미디움 난이도 트리문제를 보면서 재미있었던 문제가 바로 이 문제이다. 허프만 디코딩 문제는 트리를 순회하면서 이진 문자열을 디코딩하는 문제이다.
문제를 접근한 전략은 간단했다. 이진 문자열을 부분으로 자르면서 대응되는 문자가 있는지 없는지 찾아보는 것이다. 부분 문자열의 길이를 늘려가면서 트리를 순회하면 비교적 간단하게 풀이할 수 있는 문제였다.
void decode(String s, Node root) {
String answer = "";
String target = "";
while (s.length() > 0) {
for (int idx = 1; idx <= s.length(); idx++) {
Node head = root;
target = s.substring(0, idx);
for (char t : target.toCharArray()) {
if (head != null) {
if (t == '0') {
head = head.left;
}
else if (t == '1') {
head = head.right;
}
}
}
if (head.data != 0) {
String changed = Character.toString(head.data);
answer += changed;
s = s.substring(idx, s.length());
idx = 0;
}
}
}
System.out.println(answer);
}
주의할 점은 for문을 돌면서 idx가 증가한다는 것과 부분 문자열로 자를 때 인덱스 계산을 잘 해줘야 한다는 점이다. 이 두 부분을 디버깅하는데 시간을 오래 썼지만 접근방법은 유효했다.
'Algorithm & DataStructure' 카테고리의 다른 글
C++로 구현하는 자료구조 (1) - ArrayList (0) | 2020.09.03 |
---|---|
[코드업 3002] 기억력 테스트 3 (0) | 2020.09.01 |
[코드업 3710] 369 게임 3 (Large Test Case) (0) | 2020.07.10 |
[코드업 3707] 합의 개수 (0) | 2020.07.07 |
[코드업 3701] 파스칼의 삼각형 (0) | 2020.07.01 |
Comments