[Algorithm] Stack, Queue, Hash Table - 문제

박연주·2022년 8월 3일
0

1. 탑

Q. 수평 직선에 탑 N대를 세웠습니다. 모든 탑의 꼭대기에는 신호를 송/수신하는 장치를 설치했습니다. 발사한 신호는 신호를 보낸 탑보다 높은 탑에서만 수신합니다. 또한 ,한 번 수신된 신호는 다른 탑으로 송신되지 않습니다.

예를 들어 높이가 6, 9, 5, 7, 4 인 다섯 탑이 왼쪽으로 동시에 레이저 신호를 발사합니다. 
그러면, 탑은 다음과 같이 신호를 주고 받습니다. 

높이가 4인 다섯 번째 탑에서 발사한 신호는 높이가 7인 네 번째 탑에서 수신하고, 
높이가 7인 네 번째 탑의 신호는 높이가 9인 두 번째 탑이, 
높이가 5인 세 번째 탑의 신호도 높이가 9인 두 번째 탑이 수신합니다. 

높이가 9인 두 번째 탑과 높이가 6인 첫 번째 탑이 보낸 레이저 신호는 
어떤 탑에서도 수신할 수 없습니다.

이 때, 맨 왼쪽부터 순서대로 탑의 높이를 담은 배열 heights가 매개변수로 주어질 때 각 탑이 쏜 신호를 어느 탑에서 받았는지 기록한 배열을 반환하시오.

[6, 9, 5, 7, 4] # 라고 입력된다면,

# 아래 그림처럼 탑이 있다고 보시면 됩니다!
<- <- <- <- <- 레이저의 방향
   I 
   I
   I     I
I  I     I
I  I  I  I  
I  I  I  I  I
I  I  I  I  I
I  I  I  I  I
I  I  I  I  I

[0, 0, 2, 2, 4] # 다음과 같이 반환하시면 됩니다!
top_heights = [6, 9, 5, 7, 4]
# 6 9 5 7 4
# 0 0 0 0 4    4번째의 7층 탑에 레이저

# 6 9 5 7      맨 뒤의 숫자는 필요 없어짐
# 0 0 0 2 4    2번째의 9층 탑에 레이저

# 6 9 5
# 0 0 2 2 4

# 6 9
# 0 0 2 2 4

# 6
# 0 0 2 2 4
                #  시작    끝   만큼씩 빼서
# for idx in range((5-1), 0, -1):
#   print(idx)

def get_receiver_top_orders(heights):
    answer = [0] * len(heights)
    while heights:
        height = heights.pop()   # [6, 9, 5, 7]
        for idx in range(len(heights) -1, 0, -1):
            if heights[idx] > height:
                answer[len(heights)] = idx + 1   # stack에서 하나를 뺸 것의 인덱스를 알고싶다면
                break                            # 남은 스택의 길이로 구할 수 있음
    return answer


print(get_receiver_top_orders(top_heights)) 
-> [0, 0, 2, 2, 4]

2. 출석체크

  • 누가 출석 안했는지
all_students = ["나연", "정연", "모모", "사나", "지효", "미나", "다현", "채영", "쯔위"]
present_students = ["정연", "모모", "채영", "쯔위", "사나", "나연", "미나", "다현"]


def get_absent_student(all_array, present_array):
    dict = {}
    for key in all_array:
        dict[key] = True  # 아무 값이나 넣어도 상관 없음

    for key in present_array:  # dict에서 key 를 하나씩 없앱니다
        del dict[key]

    for key in dict.keys():  # key 중에 하나를 바로 반환. 한 명 밖에 없으니 
        return key


print(get_absent_student(all_students, present_students))

print("정답 = 예지 / 현재 풀이 값 = ",get_absent_student(["류진","예지","채령","리아","유나"],["리아","류진","채령","유나"]))
print("정답 = RM / 현재 풀이 값 = ",get_absent_student(["정국","진","뷔","슈가","지민","RM"],["뷔","정국","지민","진","슈가"]))

profile
하루에 한 개념씩

0개의 댓글