제출한 코드 :
import math
def solution(progresses, speeds):
# 각 작업이 완료되는데 필요한 일수 계산
days = [math.ceil((100 - p) / s) for p, s in zip(progresses, speeds)]
# 배포 결과를 저장할 리스트
result = []
# 첫 번째 작업의 완료 일수
current_max_day = days[0]
count = 0
for day in days:
if day > current_max_day:
result.append(count)
current_max_day = day
count = 1
else:
count += 1
# 마지막 배포 그룹 추가
result.append(count)
return result
예를 들어 프로세스 4개 [A, B, C, D]가 순서대로 실행 대기 큐에 들어있고, 우선순위가 [2, 1, 3, 2]라면 [C, D, A, B] 순으로 실행하게
됩니다.
현재 실행 대기 큐(Queue)에 있는 프로세스의 중요도가 순서대로 담긴
배열 priorities와, 몇 번째로 실행되는지 알고싶은 프로세스의 위치를
알려주는 location이 매개변수로 주어질 때, 해당 프로세스가 몇 번째로
실행되는지 return 하도록 solution 함수를 작성해주세요.
제출한 코드 :
from collections import deque
def solution(priorities, location):
# 프로세스와 초기 위치를 큐에 저장
queue = deque([(p, i) for i, p in enumerate(priorities)])
# 실행 순서 카운터
order = 0
while queue:
# 큐의 맨 앞에 있는 프로세스
current = queue.popleft()
# 큐에 남아있는 프로세스 중 우선순위가 더 높은 것이 있는지 확인
if any(current[0] < q[0] for q in queue):
# 현재 프로세스를 다시 큐의 끝에 넣음
queue.append(current)
else:
# 현재 프로세스를 실행
order += 1
# 현재 프로세스가 목표 프로세스인지 확인
if current[1] == location:
return order
제출한 코드 :
from itertools import permutations
def solution(k, dungeons):
max_dungeons = 0
n = len(dungeons)
for perm in permutations(dungeons):
current_fatigue = k
explored_dungeons = 0
for required, consume in perm:
if current_fatigue >= required:
current_fatigue -= consume
explored_dungeons += 1
else:
break
max_dungeons = max(max_dungeons, explored_dungeons)
return max_dungeons
제출한 코드 :
def solution(numbers, target):
def dfs(index, current_sum):
# 기저 사례: 인덱스가 numbers의 길이와 같으면 현재 합이 타겟과 같은지 확인
if index == len(numbers):
return 1 if current_sum == target else 0
# 현재 숫자를 더하는 경우와 빼는 경우를 재귀 호출
add_case = dfs(index + 1, current_sum + numbers[index])
subtract_case = dfs(index + 1, current_sum - numbers[index])
# 두 경우의 수를 합산하여 반환
return add_case + subtract_case
# 재귀 호출 시작
return dfs(0, 0)
n이 주어집니다. 이 숫자를 k진수로 바꿨을 때, 변환된 수 안에 아래 조건에 맞는 소수(Prime number)가 몇 개인지 알아보려 합니다.0P0처럼 소수 양쪽에 0이 있는 경우P0처럼 소수 오른쪽에만 0이 있고 왼쪽에는 아무것도 없는 경우0P처럼 소수 왼쪽에만 0이 있고 오른쪽에는 아무것도 없는 경우P처럼 소수 양쪽에 아무것도 없는 경우P는 각 자릿수에 0을 포함하지 않는 소수입니다.P가 될 수 없습니다. 예를 들어, 437674을 3진수로 바꾸면 211020101011입니다. 여기서
찾을 수 있는 조건에 맞는 소수는 왼쪽부터 순서대로 211, 2, 11이
있으며, 총 3개입니다. (211, 2, 11을 k진법으로 보았을 때가 아닌,
10진법으로 보았을 때 소수여야 한다는 점에 주의합니다.) 211은 P0
형태에서 찾을 수 있으며, 2는 0P0에서, 11은 0P에서 찾을 수
있습니다.
정수 n과 k가 매개변수로 주어집니다. n을 k진수로 바꿨을 때,
변환된 수 안에서 찾을 수 있는 위 조건에 맞는 소수의 개수를 return
하도록 solution 함수를 완성해 주세요.
- 제한사항
- 1 ≤ n ≤ 1,000,000
- 3 ≤ k ≤ 10
제출한 코드 :
def is_prime(num):
if num <= 1:
return False
if num == 2:
return True
if num % 2 == 0:
return False
sqrt_n = int(num ** 0.5) + 1
for divisor in range(3, sqrt_n, 2):
if num % divisor == 0:
return False
return True
def convert_to_base_k(n, k):
result = ''
while n > 0:
result = str(n % k) + result
n //= k
return result
def solution(n, k):
base_k_number = convert_to_base_k(n, k)
candidates = base_k_number.split('0')
count_primes = 0
for candidate in candidates:
if candidate and is_prime(int(candidate)):
count_primes += 1
return count_primes