Skip to content
14 changes: 14 additions & 0 deletions Programmers/Been/Week1/달리기_경주.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
def solution(players, callings):
rank = {name: i for i, name in enumerate(players)}
order = players[:]

for name in callings:
idx = rank[name]
prev_idx = idx - 1
prev_name = order[prev_idx]

order[idx], order[prev_idx] = order[prev_idx], order[idx]
rank[name] = prev_idx
rank[prev_name] = idx

return order
18 changes: 18 additions & 0 deletions Programmers/Been/Week2/모의고사.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
def solution(answers):
answer = []
patterns = [
[1,2,3,4,5],
[2,1,2,3,2,4,2,5],
[3,3,1,1,2,2,4,4,5,5]
]
counts = [0, 0, 0]

for i in range(len(answers)):
for j in range(3):
if answers[i] == patterns[j][i % len(patterns[j])]:
counts[j] += 1

max_count = max(counts)
answer = [i+1 for i in range(3) if counts[i] == max_count]

return answer
19 changes: 19 additions & 0 deletions Programmers/Been/Week2/숫자_문자열과_영단어.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
def solution(s):
word_to_num = {
"zero": "0", "one": "1", "two": "2", "three": "3", "four": "4",
"five": "5", "six": "6", "seven": "7", "eight": "8", "nine": "9"
}
answer = ''
i = 0
while i < len(s):
if s[i].isdigit():
answer += s[i]
i += 1
else:
for k,v in word_to_num.items():
if s[i: i+len(k)] == k:
answer += v
i += len(k)
pass

return int(answer)
12 changes: 12 additions & 0 deletions Programmers/Been/Week2/영어_끝말잇기.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
def solution(n, words):
answer = []
for i in range(len(words)):
if answer == []:
answer.append(words[i])
elif answer != [] and words[i-1][-1] == words[i][0] and words[i] not in answer:
answer.append(words[i])
else:
return [i % n + 1, i // n + 1]


return [0,0]
6 changes: 6 additions & 0 deletions Programmers/Been/Week2/최댓값과_최솟값.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
def solution(s):
answer = s.split(" ")
result = list(map(int, answer))
min_val = min(result)
max_val = max(result)
return f"{min_val} {max_val}"
10 changes: 10 additions & 0 deletions Programmers/Been/Week2/콜라_문제.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
def solution(a, b, n):
answer = 0
num = n
while num >= a:
time = num // a
num_cola = time * b
answer += num_cola
num = num % a + num_cola

return answer
15 changes: 15 additions & 0 deletions Programmers/Been/Week2/콜라츠_추측.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
def solution(num):
answer = 0
if num == 1:
return 0
while num != 1 and answer < 500:
if num % 2 == 0:
num = num // 2
answer += 1
elif num % 2 != 0:
num = num * 3 + 1
answer += 1
if answer == 500:
return -1
return answer

4 changes: 4 additions & 0 deletions Programmers/Been/Week2/폰켓몬.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
from collections import Counter
def solution(nums):
answer = Counter(nums)
return min(len(Counter(nums)), len(nums) // 2)
6 changes: 6 additions & 0 deletions Programmers/Been/Week3/땅따먹기.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
def solution(land):
for i in range(1, len(land)):
for j in range(4):
land[i][j] += max(land[i-1][:j] +land[i-1][j+1:])

return max(land[-1])
7 changes: 7 additions & 0 deletions Programmers/Been/Week3/예상대진표.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
def solution(n, a, b):
answer = 0
while a != b:
a = (a + 1) // 2
b = (b + 1) // 2
answer += 1
return answer
14 changes: 14 additions & 0 deletions Programmers/Been/Week3/옹알이(2).py
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
from itertools import groupby

def solution(babbling):
words = ["aya", "ye", "woo", "ma"]
answer = 0

for word in babbling:
for wd in words:
word = word.replace(wd, wd + " ")
parts = word.split()
if all(p in words for p in parts) and len(parts) == len(list(groupby(parts))):
answer += 1

return answer
15 changes: 15 additions & 0 deletions Programmers/Been/Week4/fail_rate.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
from collections import Counter
def solution(N, stages):
counter = Counter(stages)
total = len(stages)
fail_rate = {}

for stage in range(1, N+1):
if total == 0:
fail_rate[stage] = 0
else:
fail_rate[stage] = counter[stage] / total
total -= counter[stage]

return sorted(fail_rate, key=lambda x: fail_rate[x], reverse=True)

18 changes: 18 additions & 0 deletions Programmers/Been/Week4/make_prime.Py
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
from itertools import combinations

def solution(nums):
answer = 0

def is_prime(n):
if n < 2:
return False
for i in range(2, int(n ** 0.5) + 1):
if n % i == 0:
return False
return True

for combo in combinations(nums, 3):
if is_prime(sum(combo)):
answer += 1

return answer
16 changes: 16 additions & 0 deletions Programmers/Been/Week4/split_string.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
def solution(s):
answer = 0
cnt = 0
std = 0

for i in s:
if cnt == 0:
std = i
answer += 1

if i == std:
cnt += 1
else:
cnt -= 1

return answer
10 changes: 10 additions & 0 deletions Programmers/Been/Week4/valid_parentheses.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
def solution(s):
stack = []
for c in s:
if not stack:
stack.append(c)
elif stack[-1] == '(' and c == ')':
stack.pop()
else:
stack.append(c)
return not stack