Skip to content

Commit 5c57fef

Browse files
committed
2 parents 38aab1c + f3be146 commit 5c57fef

File tree

4 files changed

+114
-0
lines changed

4 files changed

+114
-0
lines changed
Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
import sys
2+
input = sys.stdin.readline
3+
4+
n = int(input())
5+
nums = list(map(int, input().strip().split()))
6+
ops = list(map(int, input().strip().split()))
7+
8+
# 최댓값과 최솟값을 구하기 위해 초기값 설정
9+
max_result = -int(1e9)
10+
min_result = int(1e9)
11+
12+
def dfs(nums, index, current_result, plus, minus, multiply, divide):
13+
global max_result, min_result
14+
15+
if index == len(nums):
16+
# 모든 숫자를 다 사용했으면 최댓값과 최솟값 갱신
17+
max_result = max(max_result, current_result)
18+
min_result = min(min_result, current_result)
19+
return
20+
21+
if plus > 0:
22+
dfs(nums, index + 1, current_result + nums[index], plus - 1, minus, multiply, divide)
23+
if minus > 0:
24+
dfs(nums, index + 1, current_result - nums[index], plus, minus - 1, multiply, divide)
25+
if multiply > 0:
26+
dfs(nums, index + 1, current_result * nums[index], plus, minus, multiply - 1, divide)
27+
if divide > 0:
28+
if current_result < 0:
29+
# 음수일 때의 나눗셈 처리
30+
dfs(nums, index + 1, -(-current_result // nums[index]), plus, minus, multiply, divide - 1)
31+
else:
32+
dfs(nums, index + 1, current_result // nums[index], plus, minus, multiply, divide - 1)
33+
34+
35+
36+
# 초기값은 첫 번째 숫자, index는 1부터 시작
37+
dfs(nums, 1, nums[0], ops[0], ops[1], ops[2], ops[3])
38+
39+
print(max_result)
40+
print(min_result)
41+
42+
'''
43+
# 3달 전 풀이
44+
45+
# 입력받기
46+
n = int(input()) # 수의 개수
47+
nums = list(map(int, input().split())) # 수열
48+
operator = list(map(int, input().split()))
49+
50+
# 최솟값, 최댓값 초기화
51+
maxValue = int(-1e9)
52+
minValue = int(1e9)
53+
54+
def calculator(idx, res, add, sub, prd, div):
55+
global minValue, maxValue
56+
57+
if idx == n:
58+
# 최솟값과 최댓값 갱신
59+
maxValue = max(maxValue, res)
60+
minValue = min(minValue, res)
61+
return
62+
63+
if add > 0:
64+
calculator(idx + 1, res + nums[idx], add-1, sub, prd, div)
65+
66+
if sub > 0:
67+
calculator(idx + 1, res - nums[idx], add, sub-1, prd, div)
68+
69+
if prd > 0:
70+
calculator(idx + 1, res * nums[idx], add, sub, prd-1, div)
71+
72+
if div > 0:
73+
calculator(idx + 1, int(res / nums[idx]), add, sub, prd, div-1)
74+
75+
calculator(1, nums[0], operator[0], operator[1], operator[2], operator[3])
76+
print(maxValue)
77+
print(minValue)
78+
'''
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
def solution(citations):
2+
citations.sort()
3+
4+
for i in range(len(citations)):
5+
if citations[i] >= len(citations) - i:
6+
return len(citations) - i
7+
return 0
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
def solution(phone_book):
2+
# 전화번호부 phone_book을 집합(set())으로 변환하여 prefixes에 저장.
3+
# 집합으로 저장하는 이유는 in 연산이 평균적으로 $O(1)$의 시간 복잡도를 가지고 있으므로 for 문 안에서 사용하더라도 효율적이기 때문
4+
prefixes = set(phone_book)
5+
6+
for number in phone_book:
7+
for i in range(1, len(number)):
8+
# 각 전화번호 number에 대해, 길이가 1이상인 그 전화번호의 모든 접두어를 prefix에 반복하여 저장한다.
9+
prefix = number[:i]
10+
# prefix가 prefixes에 존재하는지 확인한다.
11+
if prefix in prefixes:
12+
return False # 존재하면 바로 False
13+
return True # 모든 번호에 대해 접두어가 발견되지 않는다면 True 반환
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import math
2+
def solution(progresses, speeds):
3+
answer = [] # 정답리스트
4+
stack = [] # 스택
5+
feat_count = len(progresses) # 총 기능 개수
6+
for i in range(feat_count):
7+
day = math.ceil((100 - progresses[i]) / speeds[i]) # 걸리는 날짜 계산, 무조건 올림
8+
# 스택이 비어 있거나, 처음 스택에 들어간 값보다 걸리는 날짜가 같거나 작다면 push
9+
if not stack or stack[0] >= day:
10+
stack.append(day)
11+
# 아니라면 스택의 길이를 정답리스트에 추가하고 스택에 새로운 값으로 대치
12+
else:
13+
answer.append(len(stack))
14+
stack = [day]
15+
answer.append(len(stack)) # 마지막에 추가하지 못한 answer 추가
16+
return answer

0 commit comments

Comments
 (0)