목록수학/알고리즘 (22)
jm_p_op
1. 데이터(D)를 n차원에 펼쳐둔다2. 확인하는 데이터(d) 와 가장 가까운 데이터부터 k번 데이터까지 확인한다.3.그중 다수결의 원칙으로 결정한다.knn.train(D)result=knn(d,k=k) k=1이면 가장 가까운 데이터를 확인해준다.데이터를 모두 사용함으로, 학습시킬수록 사용메모리가 커진다.
문득 list에 요소를 더할땐 append 쓰면서 list끼리 합칠땐 + 연산자를 사용한다. +연산자는 새로운 list를 제작함으로 시간복잡도가 늘어난다. a=[1,2] b=[3,4] a.extend(b) print(a) #[1,2,3,4] 왠만하면 extend쓰자;;;;;
코테중 함수명이 기억 안난다면 직접 만들어 써야 하니 연습(실제 코드 짤땐, 검색으로 찾아서 쓰면된다....) def itertool(selection:list,lim:int,count=1,not_select=0) -> list: #미선택포함 if count>lim: output=[[]] else: output=[] #선택만 output=[[]] if lim>=count: for i in range(not_select,len(selection)): type=i+1 # 비독립 type=i # 중복제거 type=0 # 독립 for case in itertool(selection,lim,count=count+1,not_select=type): output.append([i]+case) return output..
https://www.acmicpc.net/problem/14502 지도를 어떻게 저장할것인가? =>dictionary : key=tuple dictionaty.copy()를 사용하여 값 변동시 원래값 남도록 함 all_case() : 막는 모든 경우의 수 : 중복 없이 3번으로 한정되어있어 재귀형식을 안씀=> 코테니까 빠르게 풀자 palce_value() : 바이러스가 퍼질 공간과 아닌 공간 찾기 확인할 공간(_maps)이 없어질때까지 pop함, place는 확인한 공간갯수, not_va을 통하여 바이러스 퍼지면 0을 만들고 곱해서 확인할 갯수 체크 import sys def places_value(maps): answer=0 _maps=maps.copy() while _maps: start,value..
[a,b]구간 안에서 특정조건(최대,최소,등등)을 찾기 위해 중간에 임의의 지점(pivot)을 확인하여 범위를 줄이는 작업 이때 피봇하는 양을 최대한 줄이는것이 핵심이다. f'(x)>0이고 f(x)>=m을 만족하는 x를 찾는다고 할때, 탐색 구간의 중간을 기점으로 m이 존재하는 공간을 탐색해 간다면, m에 가까워 질것이다. (이때 오차 범위를 dx,dy, 등등 여러가지 방법으로 잡을수 있다.) 아래로 볼록 형식에서 최소값을 찾기 위하여, [a,b,c1,c2]의 값을 구한후, a,b중 가장 큰것을 제거하고 새로운 c를 추가 하는 방식으로 범위를 좁히는 방식 자르는 구간이 랜덤하다면, 결국 목적지까지 피봇되는 횟수가 운에 따라 엄청 많아질것이다. 첫 피봇팅 후, 다음 피봇을 할때 전의 데이터를 유지한다면 비..
시작점에서 목표지점까지 최단경로를 찾는 알고리즘이다. 짧게 걸리는 것부터 찾아가며 목표지점까지 가는 알고리즘 장점 : 최단경로보다 더 걸리는 공간들은 계산들을 줄일수가 있다. 확인할 리스트에서 가장 가까이 있는것 찾기(초기는 하나만 있음으로 상관 없음) 가장 가까이 있는것에서 다음 이동 경로 리스트를 추가 1~2 반복 확인 지역에 목표지점이 있고, 검색지역이 그 값보다 클때 반복을 멈춘다 위와 같이 계속 돌리면 된다. 허나 이떄 조심해야되는것이 만약 C1=>C2 에서 0.2초가 걸린다고 하자 이땐 C2의 값을 2.2로 수정이 필요하다. 검색지역을 추가할때 정렬된 형식이 아니라면, 매번 최소값을 찾기위해 리스트를 완전 탐색해줘야한다. 이를 줄이기 위하여 정렬된 상태로 만들고, 추가되는 값을 정렬된 공간사이..
코드를 순서대로 작성을 한다면 변수 하나를 추가해서 사라질 데이터를 임시 저장하여 바꾼다. a=1 b=2 save_data=a a=b b=save_data 허나 가장 심플한 방법은 언패킹처럼 데이터를 넣는것이다. a=1 b=2 a,b=b,a
결과 400초->100초 같이한팀원 https://kmy9810.tistory.com/ https://dawnpast12.tistory.com/ 김묭의 자기개발 kmy9810.tistory.com https://school.programmers.co.kr/learn/courses/30/lessons/135808 def solution(k, m, score): score.sort(reverse=True) li_1 = [] li_2 = [] answer = 0 for i in score: if len(li_2) == m: li_1.append(li_2) li_2 = [i] else: li_2.append(i) if len(li_2) == m: li_1.append(li_2) li_2 = [] for j in..