diff --git "a/Programmers/Been/Week1/\353\213\254\353\246\254\352\270\260_\352\262\275\354\243\274.py" "b/Programmers/Been/Week1/\353\213\254\353\246\254\352\270\260_\352\262\275\354\243\274.py" new file mode 100644 index 0000000..1b5b419 --- /dev/null +++ "b/Programmers/Been/Week1/\353\213\254\353\246\254\352\270\260_\352\262\275\354\243\274.py" @@ -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 \ No newline at end of file diff --git "a/Programmers/Been/Week2/\353\252\250\354\235\230\352\263\240\354\202\254.py" "b/Programmers/Been/Week2/\353\252\250\354\235\230\352\263\240\354\202\254.py" new file mode 100644 index 0000000..1209714 --- /dev/null +++ "b/Programmers/Been/Week2/\353\252\250\354\235\230\352\263\240\354\202\254.py" @@ -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 \ No newline at end of file diff --git "a/Programmers/Been/Week2/\354\210\253\354\236\220_\353\254\270\354\236\220\354\227\264\352\263\274_\354\230\201\353\213\250\354\226\264.py" "b/Programmers/Been/Week2/\354\210\253\354\236\220_\353\254\270\354\236\220\354\227\264\352\263\274_\354\230\201\353\213\250\354\226\264.py" new file mode 100644 index 0000000..47e2350 --- /dev/null +++ "b/Programmers/Been/Week2/\354\210\253\354\236\220_\353\254\270\354\236\220\354\227\264\352\263\274_\354\230\201\353\213\250\354\226\264.py" @@ -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) \ No newline at end of file diff --git "a/Programmers/Been/Week2/\354\230\201\354\226\264_\353\201\235\353\247\220\354\236\207\352\270\260.py" "b/Programmers/Been/Week2/\354\230\201\354\226\264_\353\201\235\353\247\220\354\236\207\352\270\260.py" new file mode 100644 index 0000000..57c3c2b --- /dev/null +++ "b/Programmers/Been/Week2/\354\230\201\354\226\264_\353\201\235\353\247\220\354\236\207\352\270\260.py" @@ -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] \ No newline at end of file diff --git "a/Programmers/Been/Week2/\354\265\234\353\214\223\352\260\222\352\263\274_\354\265\234\354\206\237\352\260\222.py" "b/Programmers/Been/Week2/\354\265\234\353\214\223\352\260\222\352\263\274_\354\265\234\354\206\237\352\260\222.py" new file mode 100644 index 0000000..ab1e888 --- /dev/null +++ "b/Programmers/Been/Week2/\354\265\234\353\214\223\352\260\222\352\263\274_\354\265\234\354\206\237\352\260\222.py" @@ -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}" \ No newline at end of file diff --git "a/Programmers/Been/Week2/\354\275\234\353\235\274_\353\254\270\354\240\234.py" "b/Programmers/Been/Week2/\354\275\234\353\235\274_\353\254\270\354\240\234.py" new file mode 100644 index 0000000..aecc1cc --- /dev/null +++ "b/Programmers/Been/Week2/\354\275\234\353\235\274_\353\254\270\354\240\234.py" @@ -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 \ No newline at end of file diff --git "a/Programmers/Been/Week2/\354\275\234\353\235\274\354\270\240_\354\266\224\354\270\241.py" "b/Programmers/Been/Week2/\354\275\234\353\235\274\354\270\240_\354\266\224\354\270\241.py" new file mode 100644 index 0000000..d68228f --- /dev/null +++ "b/Programmers/Been/Week2/\354\275\234\353\235\274\354\270\240_\354\266\224\354\270\241.py" @@ -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 + \ No newline at end of file diff --git "a/Programmers/Been/Week2/\355\217\260\354\274\223\353\252\254.py" "b/Programmers/Been/Week2/\355\217\260\354\274\223\353\252\254.py" new file mode 100644 index 0000000..a8275bc --- /dev/null +++ "b/Programmers/Been/Week2/\355\217\260\354\274\223\353\252\254.py" @@ -0,0 +1,4 @@ +from collections import Counter +def solution(nums): + answer = Counter(nums) + return min(len(Counter(nums)), len(nums) // 2) \ No newline at end of file diff --git "a/Programmers/Been/Week3/\353\225\205\353\224\260\353\250\271\352\270\260.py" "b/Programmers/Been/Week3/\353\225\205\353\224\260\353\250\271\352\270\260.py" new file mode 100644 index 0000000..35cefbe --- /dev/null +++ "b/Programmers/Been/Week3/\353\225\205\353\224\260\353\250\271\352\270\260.py" @@ -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]) \ No newline at end of file diff --git "a/Programmers/Been/Week3/\354\230\210\354\203\201\353\214\200\354\247\204\355\221\234.py" "b/Programmers/Been/Week3/\354\230\210\354\203\201\353\214\200\354\247\204\355\221\234.py" new file mode 100644 index 0000000..95e0ab1 --- /dev/null +++ "b/Programmers/Been/Week3/\354\230\210\354\203\201\353\214\200\354\247\204\355\221\234.py" @@ -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 \ No newline at end of file diff --git "a/Programmers/Been/Week3/\354\230\271\354\225\214\354\235\264(2).py" "b/Programmers/Been/Week3/\354\230\271\354\225\214\354\235\264(2).py" new file mode 100644 index 0000000..6b9ad61 --- /dev/null +++ "b/Programmers/Been/Week3/\354\230\271\354\225\214\354\235\264(2).py" @@ -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 \ No newline at end of file diff --git a/Programmers/Been/Week4/adjacent_cells.py b/Programmers/Been/Week4/adjacent_cells.py new file mode 100644 index 0000000..e32bb2d --- /dev/null +++ b/Programmers/Been/Week4/adjacent_cells.py @@ -0,0 +1,14 @@ +def solution(board, h, w): + count = 0 + len_board = len(board) + dx = [0, 1, 0, -1] + dy = [1, 0, -1, 0] + for i in range(4): + h_check = h + dx[i] + w_check = w + dy[i] + if 0 <= h_check < len_board and 0 <= w_check < len_board: + if board[h][w] == board[h_check][w_check]: + count += 1 + + + return count \ No newline at end of file diff --git a/Programmers/Been/Week4/fail_rate.py b/Programmers/Been/Week4/fail_rate.py new file mode 100644 index 0000000..108b363 --- /dev/null +++ b/Programmers/Been/Week4/fail_rate.py @@ -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) + \ No newline at end of file diff --git a/Programmers/Been/Week4/forklift_and_crane.py b/Programmers/Been/Week4/forklift_and_crane.py new file mode 100644 index 0000000..244eef3 --- /dev/null +++ b/Programmers/Been/Week4/forklift_and_crane.py @@ -0,0 +1,81 @@ +from collections import deque + +def solution(storage, requests): + n = len(storage) + m = len(storage[0]) + + grid = [] + top_row = [] + for j in range(m + 2): + top_row.append('.') + grid.append(top_row) + + for row in storage: + new_row = ['.'] + for ch in row: + new_row.append(ch) + new_row.append('.') + grid.append(new_row) + + bottom_row = [] + for j in range(m + 2): + bottom_row.append('.') + grid.append(bottom_row) + + N = n + 2 + M = m + 2 + + for req in requests: + if len(req) == 2: + ch = req[0] + for i in range(N): + for j in range(M): + if grid[i][j] == ch: + grid[i][j] = '.' + else: + ch = req + visited = [] + for i in range(N): + row_v = [] + for j in range(M): + row_v.append(False) + visited.append(row_v) + + q = deque() + q.append((0, 0)) + visited[0][0] = True + outside = set() + outside.add((0, 0)) + + while q: + y, x = q.popleft() + for dy, dx in ((-1, 0), (1, 0), (0, -1), (0, 1)): + ny = y + dy + nx = x + dx + if 0 <= ny < N and 0 <= nx < M and not visited[ny][nx] and grid[ny][nx] == '.': + visited[ny][nx] = True + outside.add((ny, nx)) + q.append((ny, nx)) + + to_remove = [] + for i in range(N): + for j in range(M): + if grid[i][j] == ch: + for dy, dx in ((-1, 0), (1, 0), (0, -1), (0, 1)): + ny = i + dy + nx = j + dx + if (ny, nx) in outside: + to_remove.append((i, j)) + break + + for pos in to_remove: + i, j = pos + grid[i][j] = '.' + + count = 0 + for i in range(N): + for j in range(M): + if grid[i][j] != '.': + count += 1 + + return count \ No newline at end of file diff --git a/Programmers/Been/Week4/fruit_seller.py b/Programmers/Been/Week4/fruit_seller.py new file mode 100644 index 0000000..26e434d --- /dev/null +++ b/Programmers/Been/Week4/fruit_seller.py @@ -0,0 +1,10 @@ +def solution(k, m, score): + answer = 0 + box = [] + new_score = sorted(score, reverse = True) + for i in range(0, len(new_score), m): + if i+m <= len(new_score): + box.append(new_score[i:i+m]) + for i in range(len(box)): + answer += min(box[i]) * len(box[i]) + return answer \ No newline at end of file diff --git a/Programmers/Been/Week4/make_prime.Py b/Programmers/Been/Week4/make_prime.Py new file mode 100644 index 0000000..27c75f0 --- /dev/null +++ b/Programmers/Been/Week4/make_prime.Py @@ -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 \ No newline at end of file diff --git a/Programmers/Been/Week4/only_two_cipher.py b/Programmers/Been/Week4/only_two_cipher.py new file mode 100644 index 0000000..78063a8 --- /dev/null +++ b/Programmers/Been/Week4/only_two_cipher.py @@ -0,0 +1,14 @@ +def solution(s, skip, index): + answer = '' + for i in s: + value = ord(i) + moved = 0 + while moved < index: + value += 1 + if value > ord('z'): + value = ord('a') + if chr(value) not in skip: + moved += 1 + answer += chr(value) + + return answer \ No newline at end of file diff --git a/Programmers/Been/Week4/split_string.py b/Programmers/Been/Week4/split_string.py new file mode 100644 index 0000000..53eee71 --- /dev/null +++ b/Programmers/Been/Week4/split_string.py @@ -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 \ No newline at end of file diff --git a/Programmers/Been/Week4/valid_parentheses.py b/Programmers/Been/Week4/valid_parentheses.py new file mode 100644 index 0000000..813d345 --- /dev/null +++ b/Programmers/Been/Week4/valid_parentheses.py @@ -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 \ No newline at end of file