본문 바로가기
TIL

99클럽 19번째 TIL

by double-step 2024. 4. 12.
728x90
반응형
SMALL

비기너 문제

문제 설명
2016년 1월 1일은 금요일입니다. 2016년 a월 b일은 무슨 요일일까요? 두 수 a ,b를 입력받아 2016년 a월 b일이 무슨 요일인지 리턴하는 함수, solution을 완성하세요. 요일의 이름은 일요일부터 토요일까지 각각 SUN,MON,TUE,WED,THU,FRI,SAT

입니다. 예를 들어 a=5, b=24라면 5월 24일은 화요일이므로 문자열 "TUE"를 반환하세요.

제한 조건
2016년은 윤년입니다.
2016년 a월 b일은 실제로 있는 날입니다. (13월 26일이나 2월 45일같은 날짜는 주어지지 않습니다)
입출력 예
a b result
5 24 "TUE"

 

정답

def solution(a, b):
    answer = ''
    weekday = ['THU','FRI','SAT','SUN','MON','TUE','WED']
    month = [0,31,29,31,30,31,30,31,31,30,31,30,31]
    day =b
    for i in range(a):
        day += month[i]
    day %=7
    answer = weekday[day]
    return answer

 

미들러 문제

문제 설명
정수로 이루어진 배열 numbers가 있습니다. 배열 의 각 원소들에 대해 자신보다 뒤에 있는 숫자 중에서 자신보다 크면서 가장 가까이 있는 수를 뒷 큰수라고 합니다.
정수 배열 numbers가 매개변수로 주어질 때, 모든 원소에 대한 뒷 큰수들을 차례로 담은 배열을 return 하도록 solution 함수를 완성해주세요. 단, 뒷 큰수가 존재하지 않는 원소는 -1을 담습니다.

제한사항
4 ≤ numbers의 길이 ≤ 1,000,000
1 ≤ numbers[i] ≤ 1,000,000
입출력 예
numbers result
[2, 3, 3, 5] [3, 5, 5, -1]
[9, 1, 5, 3, 6, 2] [-1, 5, 6, 6, -1, -1]
입출력 예 설명
입출력 예 #1
2의 뒷 큰수는 3입니다. 첫 번째 3의 뒷 큰수는 5입니다. 두 번째 3 또한 마찬가지입니다. 5는 뒷 큰수가 없으므로 -1입니다. 위 수들을 차례대로 배열에 담으면 [3, 5, 5, -1]이 됩니다.

입출력 예 #2
9는 뒷 큰수가 없으므로 -1입니다. 1의 뒷 큰수는 5이며, 5와 3의 뒷 큰수는 6입니다. 6과 2는 뒷 큰수가 없으므로 -1입니다. 위 수들을 차례대로 배열에 담으면 [-1, 5, 6, 6, -1, -1]이 됩니다.

 

정답

def solution(numbers):
    stack = []  # 뒷 큰수를 찾기 위한 스택
    result = [-1] * len(numbers)  # 결과를 담을 배열, 모든 값은 -1로 초기화
    
    for i in range(len(numbers)):
        while stack and numbers[stack[-1]] < numbers[i]:  # 스택이 비어있지 않고, 현재 값이 스택의 top 값보다 큰 경우
            top_idx = stack.pop()  # 스택의 top 값을 pop
            result[top_idx] = numbers[i]  # 뒷 큰수로 현재 값을 지정
        
        stack.append(i)  # 현재 인덱스를 스택에 추가
    
    return result

728x90
반응형
LIST

'TIL' 카테고리의 다른 글

99클럽 21번째 TIL  (0) 2024.04.14
99클럽 20번째 TIL  (1) 2024.04.13
99클럽 18번째 TIL  (0) 2024.04.11
99클럽 17번째 TIL  (0) 2024.04.10
99클럽 16번째 TIL  (0) 2024.04.09