파이썬 알고리즘 : 큰 수 만들기

2024년 4월 16일 알고리즘 문제풀이 문제 큰 수 만들기 난이도 Lv. 2 코드 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 def solution(number, k): stk = [] for num in number: # stk가 비었으면 넣음 if not stk: stk.append(num) continue if k > 0: # 지금 주목하는 수가 방금 넣은 수보다 크다면 뺸다. while stk[-1] < num: stk.pop() k -= 1 # 더이상 뺄 것이 없거나 더이상 빼면 안되면 반복문 종료 if not stk or k <= 0: break stk.append(num) # 모두 순회했는데 아직 뺄것이 남았다면 가장 뒤에것만뺀다. if k: stk = stk[:-k] answer = ''.join(stk) else: answer = ''.join(stk) return answer

2024년 4월 16일 · 1 분 · 배준수

파이썬 알고리즘 : 의상

2024년 4월 15일 알고리즘 문제풀이 문제 의상 난이도 Lv. 2 코드 1 2 3 4 5 6 7 8 9 10 11 12 13 14 def solution(clothes): answer = 0 arr = dict() for x in clothes: [n,t] = x if t in arr: arr[t] += 1 else: arr[t] = 1 cnt = 1 for a,b in arr.items(): cnt *= (b+1) answer = cnt-1 return answer

2024년 4월 15일 · 1 분 · 배준수

파이썬 알고리즘 : 실패율

2024년 4월 12일 알고리즘 문제풀이 문제 실패율 난이도 Lv. 1 코드 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 def solution(N, stages): answer = [] arr = [0 for _ in range(N+2)] arr_f = [0 for _ in range(N+2)] for i in range(len(stages)): now = stages[i] for j in range(1,now+1): arr[j] += 1 arr_f[now] += 1 tmp = [] for i in range(1,N+1): if arr[i] == 0: tmp.append([0,i]) else: tmp.append([(arr_f[i]/arr[i]),i]) tmp.sort(reverse=True, key=lambda x : (x[0],-x[1])) for i in range(N): answer.append(tmp[i][1]) return answer

2024년 4월 12일 · 1 분 · 배준수

파이썬 알고리즘 : 나누어 떨어지는 숫자 배열

2024년 4월 11일 알고리즘 문제풀이 문제 나누어 떨어지는 숫자 배열 난이도 Lv. 1 코드 1 2 3 4 5 6 7 8 9 10 def solution(arr, divisor): answer = [] for i in arr: if not i%divisor: answer.append(i) answer.sort() if answer: return answer else: return [-1]

2024년 4월 11일 · 1 분 · 배준수

파이썬 알고리즘 : 소수 찾기

2024년 4월 9일 알고리즘 문제풀이 문제 소수 찾기 난이도 Lv. 2 코드 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 from itertools import permutations def check_prime(n): if n < 2: return False elif n<4: return True if not n%2: return False for i in range(2,int(n**(0.5))+1): if not n%i: return False else: return True def make_arr(arr): result = [] n = len(arr) tmp = [] for i in range(1,n+1): tmp += list(permutations(arr,i)) for a in tmp: result.append(int("".join(a))) return result def solution(numbers): answer = 0 result = set() arr = list(numbers) arr = make_arr(arr) arr = set(arr) for i in arr: if check_prime(int(i)): result.add(int(i)) return len(result)

2024년 4월 9일 · 1 분 · 배준수

파이썬 알고리즘 : 전화번호 목록

2024년 4월 8일 알고리즘 문제풀이 문제 전화번호 목록 난이도 Lv. 2 코드 1 2 3 4 5 6 7 8 9 10 11 12 13 def solution(phone_book): answer = True arr =dict() for phone_number in phone_book: arr[phone_number] = True for phone_number in phone_book: temp="" for num in phone_number: temp +=num if temp in arr and temp!=phone_number: answer = False return answer

2024년 4월 8일 · 1 분 · 배준수

파이썬 알고리즘 : 옹알이 (2)

2024년 4월 6일 알고리즘 문제풀이 문제 옹알이 (2) 난이도 Lv. 1 코드 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 def search_index(arr,k): result = -1 if k in arr: result = arr.index(k) return result def solution(babbling): answer = 0 arr = ["aya", "ye", "woo", "ma"] for word in babbling: idx = 0 n = len(word) last_find_idx = -1 while idx <= n: if not n: answer += 1 break tmp = word[:idx+1] search_result = search_index(arr,tmp) if search_result != -1 and search_result != last_find_idx: last_find_idx = search_index(arr,tmp) word = word[idx+1:] n = len(word) idx = 0 else: idx += 1 return answer

2024년 4월 6일 · 1 분 · 배준수

파이썬 알고리즘 : 없는 숫자 더하기

2024년 4월 5일 알고리즘 문제풀이 문제 없는 숫자 더하기 난이도 Lv. 1 코드 1 2 3 4 5 def solution(numbers): answer = -1 arr = set(numbers) answer = 45 - sum(arr) return answer

2024년 4월 5일 · 1 분 · 배준수

파이썬 알고리즘 : 가장 큰 수

2024년 4월 2일 알고리즘 문제풀이 문제 가장 큰 수 난이도 Lv.2 코드 1차 실패 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 def check_first(s): if len(str(s)) == 1: return int(s) else: return int(str(s)[0]) def solution(numbers): n = len(numbers) answer = '' arr = [] for _ in range(10): arr.append([]) for num in numbers: tmp = check_first(num) arr[num].append(num) return answer 두 수 중 먼저 와야할 수는 가장 앞에 있는 수가 큰 수면 되겠다 싶었다. 그래서 모든 수를 맨 앞이 1인 수, 2인 수, … , 9인 수 까지 분류하려했다. 생각해보니 그 다음은? 그 안을 또 나누기엔 컴퓨터가 터지지 않을까? 수 두 개를 비교할 때, 길이는 중요하지 않다는 걸 파악했다. 그리고 가장 앞에 있는 수가 중요하다는 것도 캐치했다. 두번 째로 오는 수는 앞자리 수와의 비교가 중요하다. 예를 들어, 30,31,32 는 두 번째 자리가 0,1,2 로 모두 3보다 작으므로 그냥 ‘3’보다 늦게 올 애들이다. 반면 34,35 등은 3보다 더 앞에 나타나야 한다. 비교를 쉽게 하기 위해 앞자리를 복붙하면 되겠다고 생각했는데, 1000 이하이니 싹 다 3자리 짜리로 만들어주면 되겠다. ...

2024년 4월 2일 · 3 분 · 배준수

파이썬 알고리즘 : n진수 게임

2024년 4월 1일 알고리즘 문제풀이 문제 n진수 게임 난이도 Lv.2 코드 1차 실패 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 def find_limit(a,b): # a를 b진법으로 바꿀 때 자릿수를 반환 idx = 0 while b**idx < a: idx += 1 return idx def change(k,m): # k를 m진법으로 변환하는 함수 max_val = find_limit(k,m) arr = [0 for _ in range(max_val)] for i in range(max_val): arr[i] = k//(m**(max_val-(i+1))) k -= arr[i]*(m**(max_val-(i+1))) return str(''.join(arr)) def solution(n, t, m, p): answer = '' arr = [] numbers = [str(i) for i in range(10)] + ['A', 'B', 'C', 'D', 'E', 'F'] n_numbers = numbers[:n] for i in range(m*t): num = change(i,n) print(num) return answer m명이 t개를 불러야 하므로 m*t까지 숫자를 구한다음, 모두 n진법으로 바꾸려 했다. 문자열로 조각내 배열에 담은다음 찾으면 될 듯 했다. 진법 변환을 못하겠다.. ...

2024년 4월 1일 · 2 분 · 배준수