목록분류 전체보기 (107)
정글에서 온 개발자
내 코드from collections import defaultdictdef solution(participant, completion): d = defaultdict(int) for p in participant: d[p]+=1 for c in completion: d[c]-=1 return [x for x in d if d[x]!=0][0]다른 사람 풀이Counter 객체를 썼는데 좋아보였다.파이썬 Counter 공식문서from collections import Counterdef solution(participant, completion): p = Counter(participant) c = Counter(completion) p-=c return [*p...
내 코드import heapqdef solution(word): D=[] def make(str1): if(str1!=''): heapq.heappush(D,str1) if(len(str1)==5): return for c in 'AEIOU': make(str1+c) make('') cnt=1 while(D[0]!=word): heapq.heappop(D) cnt+=1 return cnt재귀로 문자열을 만들었다.정렬을 해야하는데 O(NogN) 이 걸릴걸 우려해, 생성하면서 heap에 넣었다.heap에 넣는것도 O(logN)을 N 번 하므로 O(NlogN)이지만, 생성하면서..
내 코드 (입접 행렬)def solution(N, wires): T = [[False]*(N+1) for _ in range(N+1)] for u,v in wires: T[u][v] = True T[v][u] = True def dfs(V): visited=[False]*(N+1) visited[V]=True stk=[V] while stk: v = stk.pop() for i in range(1,N+1): if(T[v][i]==True and not visited[i]): visited[i]=True..

입력이 적고(8), 문제 자체가 대놓고 완전탐색이라고 써있기 때문에 딱히 그리디를 안 따지고 풀었지만, 좀 더 빠른 코드를 고민하면서 그리디를 생각해볼 수도 있다. 그리디로 풀 수 있을까?그리디의 두가지 조건최적 부분 구조 : 문제의 최종 해결책이 부분 문제의 최적 해로 구성되어야 한다.탐욕적 선택 속성 : 각 단계의 선택이 이후의 선택에 영향을 주지 않는다.최적 부분 구조적은 소모 피로도부터 들르기얼핏 생각하기에, 최대한 많이 들르려면 피로도가 적게 드는 것부터 가야 할 것 같다.반례: [[80,20],[50,40],[30,10]] K=802→0→1 순으로 들르려고 하면 0번째에 피로도가 모자라서 1개 밖에 못 들른다.많은 필요 피로도부터 들르기그렇다면 많은 피로도부터 들르면 괜찮을까?반례: [[80,..

다양한 전체 순회permutation가장 간단하게 순열을 사용할 수 있다.from itertools import permutationsdef solution(k, dungeons): mx = 0 for perm in permutations(dungeons, len(dungeons)): hp = k visit = 0 for need,cost in perm: if(hp >= need): visit+=1 hp-=cost else: break mx = max(mx,visit) return mxPermutation 직접 구현직접 ..
부끄럽지만 원래 코드def solution(brown, yellow): MAX = int(yellow**0.5) isPrime = [True]*(MAX+1) prime = [] isPrime[0],isPrime[1] = False,False for i in range(2,MAX): if(isPrime[i]): prime.append(i) for k in range(2*i,MAX+1,i): isPrime[k]=False m = 1 n = yellow while(yellow>2): for p in prime: if(yellow%p==0): ..
좋은 코드 훔쳐오기def solution(numbers): Num = set() def perm(pick,unpick): if(pick!=''): Num.add(int(pick)) for i in range(len(unpick)): perm(pick+unpick[i], unpick[:i]+unpick[i+1:]) perm('',numbers) Num-={0,1} for i in range(2,int(max(Num)**0.5)+1): Num-=set(range(i*2,max(Num)+1,i)) return len(Num)관전 포인트itertools의 permutation을 쓰지..

코드import randomA = 0 # 구간의 최소값B = 1000 # 구간의 최대값L = 100 # 배열 최대 크기def correct_solution(numbers): answer = numbers # 정답 코드 return answerdef my_solution(numbers): answer = numbers # 내 풀이 코드 return answer def generate_random_numbers(a,b,n): return [random.randint(a,b) for _ in range(n)]def compare_solution(numbers, i=0): result1 = correct_solution(numbers) result2 = my_sol..
시도BruteForce로 비교 못함배열의 길이가 N 일 때 O(N!) 만큼 시간이 걸려 문자열을 생성해서 비교해야 한다. 생성된 문자열을 숫자로 바꾸어 비교해야하는데, 이때 숫자의 최대 길이는 1e5 * 1e3 으로 1e8 (숫자의 크기가 아니라 숫자의 길이라는데 유의) 이기 때문에 이 숫자를 2진수로 표현만 해도 약 41.52MB 를 잡아 먹는다. ( 10^(10^8) 에 밑이 2인 log를 취한 값 만큼 비트가 필요함 )가장 먼저 떠올리기 쉬운 정렬인 ‘사전식 순서(lexicographical order)’ 정렬을 해도 안 풀림[2,20,9] 을 사전식으로 정렬하면 [2,20,9] 가 나온다.사전에서는 더 짧은 숫자가 앞에 나오기 때문이다.큰 수를 만들기 위해서는 이걸 거꾸로(reverse) 해야 하..

13335번: 트럭 접근 방법 큐로 풀면 될 것 같다. 크게 2가지가 있다. 트럭이 나와야할 시간 체크하기 트럭을 큐에 넣을 때 진입하는 시간을 같이 넣는다. 트럭이 나올 때가 됐는지 시간별로 체크한다.(트럭시간 + L이 나올 시간이다.) 트럭이 이동하는 다리 시뮬레이트 하기 시간마다 실제로 트럭의 무게를 큐에 넣는다. 트럭이 들어가지 않아야할 때는 0을 넣는다. 시간마다 큐에서 pop한다. 트럭이 나와야 할 시간 체크하기 from collections import deque N,L,W = map(int,input().split()) A = deque([*map(int,input().split())]) t=0 Q=deque([]) totalWeight = 0 while A: t+=1 if(Q and t>..