Skip to content

Commit b1cbb4e

Browse files
authored
Merge pull request #13 from Kojungbeom/main
kojungbeom / 3월 5주차 / 17문제
2 parents 27546da + 92278dc commit b1cbb4e

17 files changed

+517
-0
lines changed
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
# DP 안 쓴 버전
2+
def solution(n):
3+
answer = 0
4+
temp1 = 1
5+
temp2 = 1
6+
for i in range(n):
7+
answer += temp2
8+
temp1, temp2 = answer, temp1
9+
10+
return answer % 1000000007
11+
12+
13+
# DP 쓴 버전
14+
def solution(n):
15+
answer = 0
16+
dp = [0] * (n+1)
17+
dp[0] = 1
18+
dp[1] = 1
19+
20+
for i in range(2, n+1):
21+
dp[i] = dp[i-1] + dp[i-2]
22+
23+
return dp[-1] % 1000000007
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
def solution(numbers):
2+
answer = []
3+
for n in numbers:
4+
n_str = list(str(bin(n)).replace('0b', ''))
5+
flag = False
6+
for i in range(len(n_str)-1, -1, -1):
7+
if n_str[i] == '0':
8+
if i == len(n_str)-1:
9+
flag = True
10+
n_str[i] = '1'
11+
break
12+
elif n_str[i] == '0' and n_str[i+1] == '1':
13+
n_str[i], n_str[i+1] = n_str[i+1], n_str[i]
14+
flag = True
15+
break
16+
n_str = ''.join(n_str)
17+
if not flag:
18+
n_str = '10' + n_str[1:]
19+
answer.append(int(n_str, 2))
20+
21+
return answer
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
def solution(bridge_length, weight, truck_weights):
2+
bridge = []
3+
all_weight = 0
4+
t = 0
5+
while truck_weights or bridge:
6+
t += 1
7+
8+
if bridge and t - bridge[0][1] == bridge_length:
9+
truck, _ = bridge.pop(0)
10+
all_weight -= truck
11+
12+
if truck_weights and all_weight + truck_weights[0] <= weight:
13+
truck = truck_weights.pop(0)
14+
bridge.append([truck, t])
15+
all_weight += truck
16+
17+
return t
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
def solution(topping):
2+
answer = 0
3+
cdict = {}
4+
bdict = {}
5+
6+
for t in topping:
7+
if t in bdict:
8+
bdict[t] += 1
9+
else:
10+
bdict[t] = 1
11+
12+
for t in topping:
13+
bdict[t] -= 1
14+
if bdict[t] == 0:
15+
del bdict[t]
16+
17+
if t in cdict:
18+
cdict[t] += 1
19+
else:
20+
cdict[t] = 1
21+
22+
if len(bdict) == len(cdict):
23+
answer += 1
24+
elif len(bdict) < len(cdict):
25+
break
26+
return answer
Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
1+
def solution(numbers):
2+
answer = 0
3+
permute = set()
4+
# DFS로 모든 숫자의 케이스를 set에 저장하자
5+
stack = [([], [0]*len(numbers))] # current list, visited
6+
lenN = len(numbers)
7+
while stack:
8+
currentT, visited = stack.pop()
9+
permute.add(tuple(currentT))
10+
if len(currentT) == lenN:
11+
continue
12+
13+
for i in range(lenN):
14+
if not visited[i]:
15+
new_cT = currentT[:]
16+
new_visisted = visited[:]
17+
new_cT.append(numbers[i])
18+
new_visisted[i] = True
19+
stack.append([new_cT, new_visisted])
20+
21+
temp = []
22+
new_permute = []
23+
for p in permute:
24+
p_str = ''.join(p)
25+
if p and not p[0] == '0':
26+
new_permute.append(int(p_str))
27+
28+
def sosu(n):
29+
if n < 2:
30+
return False
31+
elif n == 2:
32+
return True
33+
else:
34+
for i in range(2, n//2+1):
35+
if n % i == 0:
36+
return False
37+
return True
38+
for p in new_permute:
39+
if sosu(p):
40+
answer += 1
41+
42+
return answer
43+
44+
45+
#ChatGPT의 개선안
46+
from itertools import permutations
47+
48+
def solution(numbers):
49+
answer = 0
50+
permute = set()
51+
for i in range(1, len(numbers) + 1):
52+
permute |= set(map(int, map(''.join, permutations(numbers, i))))
53+
54+
def is_prime(n):
55+
if n < 2:
56+
return False
57+
for i in range(2, int(n ** 0.5) + 1):
58+
if n % i == 0:
59+
return False
60+
return True
61+
62+
for p in permute:
63+
if is_prime(p):
64+
answer += 1
65+
66+
return answer
67+
68+
69+
def solution(numbers):
70+
answer = 0
71+
visited = [False] * len(numbers)
72+
permute = set()
73+
74+
def dfs(current):
75+
nonlocal permute
76+
if current:
77+
permute.add(int(''.join(current)))
78+
79+
for i in range(len(numbers)):
80+
if not visited[i]:
81+
visited[i] = True
82+
dfs(current + [numbers[i]])
83+
visited[i] = False
84+
85+
dfs([])
86+
87+
def is_prime(n):
88+
if n < 2:
89+
return False
90+
for i in range(2, int(n ** 0.5) + 1):
91+
if n % i == 0:
92+
return False
93+
return True
94+
95+
for p in permute:
96+
if is_prime(p):
97+
answer += 1
98+
99+
return answer
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
from collections import deque
2+
3+
def solution(x, y, n):
4+
visited = set()
5+
queue = deque([(x, 0)]) # (현재 수, 연산 횟수)
6+
7+
while queue:
8+
current, count = queue.popleft()
9+
10+
if current == y:
11+
return count
12+
13+
if current > y:
14+
continue
15+
16+
if current not in visited:
17+
visited.add(current)
18+
queue.append((current + n, count + 1))
19+
queue.append((current * 2, count + 1))
20+
queue.append((current * 3, count + 1))
21+
22+
return -1
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
def solution(sequence, k):
2+
left, right = 0, 0
3+
lenS = len(sequence)
4+
answer = [0, lenS]
5+
sum_permute = sequence[0]
6+
7+
while True:
8+
if sum_permute < k:
9+
right += 1
10+
if right == lenS:
11+
break
12+
sum_permute += sequence[right]
13+
else:
14+
if sum_permute == k:
15+
if right - left < answer[1]-answer[0]:
16+
answer = [left, right]
17+
sum_permute -= sequence[left]
18+
left += 1
19+
return answer
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
def solution(record):
2+
answer = []
3+
id2nick = {}
4+
command = []
5+
for r in record:
6+
#print(r.split(' '))
7+
rlist = r.split(' ')
8+
9+
if rlist[0] == "Change" or rlist[0] == "Enter":
10+
id2nick[rlist[1]] = rlist[2]
11+
12+
command.append([rlist[0], rlist[1]])
13+
14+
15+
16+
for c in command:
17+
com, id = c
18+
if com == "Enter":
19+
sentence = f'{id2nick[id]}님이 들어왔습니다.'
20+
answer.append(sentence)
21+
elif com == "Leave":
22+
sentence = f'{id2nick[id]}님이 나갔습니다.'
23+
answer.append(sentence)
24+
25+
return answer
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
def solution(record):
2+
answer = []
3+
id2nick = {}
4+
command = []
5+
for r in record:
6+
#print(r.split(' '))
7+
rlist = r.split(' ')
8+
9+
if rlist[0] == "Change" or rlist[0] == "Enter":
10+
id2nick[rlist[1]] = rlist[2]
11+
12+
command.append([rlist[0], rlist[1]])
13+
14+
15+
16+
for c in command:
17+
com, id = c
18+
if com == "Enter":
19+
sentence = f'{id2nick[id]}님이 들어왔습니다.'
20+
answer.append(sentence)
21+
elif com == "Leave":
22+
sentence = f'{id2nick[id]}님이 나갔습니다.'
23+
answer.append(sentence)
24+
25+
return answer
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
def solution(files):
2+
answer = []
3+
temp = []
4+
for idx, f in enumerate(files):
5+
number_start = 0
6+
number_end = len(f)
7+
flag1 = True
8+
flag2 = True
9+
for i, c in enumerate(f):
10+
cisdigit = c.isdigit()
11+
if cisdigit:
12+
if flag1:
13+
number_start = i
14+
flag1 = False
15+
elif not cisdigit and not flag1:
16+
if flag2:
17+
flag2 = False
18+
number_end = i
19+
#print(f, number_start, number_end)
20+
temp.append([idx, f[:number_start].lower(), int(f[number_start:number_end])])
21+
22+
23+
24+
temp.sort(key=lambda x:(x[1], x[2]))
25+
for t in temp:
26+
answer.append(files[t[0]])
27+
28+
return answer

0 commit comments

Comments
 (0)