RIEN😚
이상한 나라의 개발자
RIEN😚
전체 방문자
오늘
어제
  • 분류 전체보기 (125)
    • Algorithm (68)
      • 알고리즘 (0)
      • Baekjoon (8)
      • 프로그래머스 (55)
      • HackerRank (5)
    • Android (30)
      • Project (1)
      • Error (2)
      • Studio (1)
      • Android (26)
    • Kotlin (6)
    • CS (4)
      • 네트워크 (2)
      • 데이터베이스 (2)
    • Front End (5)
      • React (1)
      • VUE (3)
      • Project (0)
      • 기타 (1)
    • 기록 (11)
      • 회고록 (6)
      • TIL (5)

블로그 메뉴

  • Github🔥
  • 포트폴리오🌹

공지사항

인기 글

티스토리

250x250
반응형
hELLO · Designed By 정상우.
RIEN😚

이상한 나라의 개발자

Algorithm/HackerRank

[Hackerrank] 1Week + Day7

2023. 2. 21. 20:28
728x90
반응형
 

Day 7 Interview Questions | HackerRank

Day 7 Interview Questions | HackerRank We use cookies to ensure you have the best browsing experience on our website. Please read our cookie policy for more information about how we use cookies.

www.hackerrank.com

1 Week의 마지막인 7 Day에는 Mock test가 없어 바로 추가 문제로 넘어가도록 하겠습니다. 🤗

 

1. Tree: Preorder Traversal

전위순회 결과를 출력하는 문제입니다.

 

def preOrder(root):
    if not root: return
    #Write your code here
    print(root.info, end=" ")
    preOrder(root.left)
    preOrder(root.right)

 

2. Tree: Huffman Decoding

주어진 문자열에서 Huffman Decoding을 수행하는 문제인줄 알아서 긴장하였지만,

실상은 Huffman Decoding이된 트리를 입력으로 주어지고, 디코딩 결과를 다시 문자열로 변경하면 되는 문제입니다.

 

1일 때는 오른쪽, 0일 때는 왼쪽 노드로 이동하면서

현재 노드가 리프노드일 때 해당 문자열을 결과 문자열에 추가해준 후, 다음 탐색을 위해 다시 root로 이동하면 됩니다. 👍🏻

def decodeHuff(root, s):
    #Enter Your Code Here
    cur = root
    result = ''
    for value in s:
        if value == '1':
            cur = cur.right
        else:
            cur = cur.left
        if not cur.left and not cur.right:
            result += cur.data
            cur = root
    print(result)

 

3. No Prefix Set

어느 한 단어가 다른 단어의 prefix인지 검사하여, 결과에 따라 다른 문자열을 출력하는 문제입니다.

 

물론 2중 for문을 사용해 각 문자열을들 비교할 수도 있지만,

이럴 경우에는 효율적이지 못하다고 생각해 문자열의 문자들로 트리를 만들어 해당 경로에 문자가 있는지 검사하는 방식으로

결과를 찾을 수 있도록 구현하였습니다.

🌹 이런 방식으로 문자열을 트리로 만드는 알고리즘을 칭하는 단어가 있었던거 같은데 기억이 나지 않네요. 😭

 

암튼! 이를 위해 먼저 아래와 같이 클래스를 만들어주었습니다.

class Node:
    def __init__(self):
        self.child = [None] * 10
        self.count = 0

child는 다음으로 오는 문자 정보를 가지고 있으며, 각 문자의 아스키코드 - 97(a) 값이 index입니다.

 

전체적인 코드는 아래와 같습니다.

class Node:
    def __init__(self):
        self.child = [None] * 10
        self.count = 0

def push(root, word):
    cur = root
    for w in word:
        index = ord(w) - 97
        if not cur.child[index]: cur.child[index] = Node()
        cur = cur.child[index]
        if cur.count > 0: return False
    
    if any(cur.child): return False
    cur.count+=1
    return True
        
def noPrefix(words):
    # Write your code here
    root = Node()
    for word in words:
        result = push(root, word)
        if not result:
            print("BAD SET")
            print(word)
            return
    
    print("GOOD SET")
반응형

'Algorithm > HackerRank' 카테고리의 다른 글

[Hackerrank] 1Week + Day6 - BFS  (0) 2023.02.20
[HackerRank] 1Week + Day5 - Pairs  (0) 2023.02.19
[HackerRank] 1Week + Day4 - Truck Tour  (0) 2023.02.18
[HackerRank] Palindrome Index - Python  (0) 2023.02.17
    'Algorithm/HackerRank' 카테고리의 다른 글
    • [Hackerrank] 1Week + Day6 - BFS
    • [HackerRank] 1Week + Day5 - Pairs
    • [HackerRank] 1Week + Day4 - Truck Tour
    • [HackerRank] Palindrome Index - Python
    RIEN😚
    RIEN😚
    안드로이드 / 코틀린 독학으로 취업하자!

    티스토리툴바