본문 바로가기

algorithm

(8)
[COS PRO 1급 문제 회고] 비트마스크로 모든 부분집합의 합 구하기 Cos Pro 자격시험 MOS 공식 사이트, COS 공식 사이트, COS Pro 공식 사이트, DATA 공식 사이트 Microsoft 국제인증 자격시험, Scratch, Entry(블록코딩)에 대한 자격증, Python, C, C++, Java에 대한 자격증, Python, Excel에 대한 데이터 분석 자격증 www.ybmit.com Cos Pro에 비트연산 문제가 나왔는데, 굉장히 신박했다. 알고리즘 테스트에 이런게 나오다니... 대학교 중간, 기말고사에나 나올법한 문제다. 덕택에 시간과 점수를 오지게 깎였다. 900점 넘기는게 목표였는데 달성 실패 ㅅㅂ 그냥 나는 COS PRO라는 시험이랑 안맞는것 같다. 앞으로 다시는 안 볼것 같다. 이번에도 한문제인가 두문제 빼고 못풀었는데(이문제 때문에 시간 ..
[알고리즘, BFS] 같은 번호가 적혀있는 칸으로 점프하기 보호되어 있는 글입니다.
Refactoring React(리팩토링 리액트) : 자료구조 적절한 자료구조를 사용하면 리액트 코드를 깔끔하게 짤 수 있습니다. 적절한 자료구조를 활용하여 로직을 리팩토링하여 애플리케이션의 확장성을 향상시켜 봅시다. 해당 게시물의 목표는 다음과 같습니다. 코드를 더 쉽게 읽고 유지보수 쉽게 하기 버그에 덜 취약한 코드 만들기 코드의 복잡성 제거하기 애플리케이션 성능 향상시키기 Map : 해시테이블 (해시) 맵, 해시 테이블 또는 딕셔너리는 기본적으로 키-값 저장소입니다. JavaScript에서 자주 만날 수 있는 다음과 같은 객체입니다. { key1: "value 1", key2: "value 2", key3: "value 3", } 네이티브 Map 객체도 존재합니다. 좀 더 성능에 최적화되어 있으므로, 키 기반 검색 시 좋습니다. 아래와 같이 값들만 배열로 만들..
[1일 1 알고리즘] 프론트엔드 JS 알고리즘 문제풀이 : 배열 평탄화(flatten) 임의의 레벨로 중첩되어 있는 배열을 평탄화하여 단일 중첩하는 알고리즘을 구해봅시다. 문제 예상 출력 // Single-level arrays are unaffected flatten([1, 2, 3]); // [1, 2, 3] // Inner arrays are flattened into a single level flatten([1, [2, 3]]); // [1, 2, 3] flatten([ [1, 2], [3, 4], ]); // [1, 2, 3, 4] // Flattens recursively flatten([1, [2, [3, [4, [5]]]]]); // [1, 2, 3, 4, 5] 문제 풀이 전에 명확화 할 것 배열에는 어떤 타입의 데이터가 포함되어 있나요? 일부 접근 방식은 특정 데이터 타입..
합이 S와 같거나 큰 subarray의 최소 길이 구하기 Smallest Subarray With a Greater Sum (easy) 리트코드의 이지 난이도 문제풀이다. 앞의 최대 합 서브어레이 구하기 응용인데, 다른 점은 if를 while로 변경해주는 점이다. (하나의 값을 더했을 때, S값을 넘어버릴 수 있기 때문이다.) 또 나는 길이를 length 변수로 따로 선언했는데, window_end-window_start+1로 바로 구할 수 있다. 알고리즘 풀이에는 루프를 돌면서 증가시켜줘야 하는 값 갯수는 최소화 시켜주는게 맞다고 생각. 아니면 효율성은 약간 떨어지더라도, 코드로 뽑아내는(함수로) 방법도 있음. 파이썬 풀이 def smallest_subarray_sum(s, arr): window_sum = 0 min_length = math.inf wind..
K 사이즈 배열의 가장 큰 합 구하기 Maximum Sum Subarray of Size K (easy) 리트코드의 이지 난이도 문제 풀이다. 시간 복잡도 : O(N) 공간 복잡도 : O(1) (배열 요소 없이 정수형 변수만 사용) 루프 밖에 윈도우 시작 인덱스 0으로 초기화(window_start=0) 길이 k가 되기 전엔 계속 더함 길이 k가 되면 (window_end>=k-1) 최대값 계산 맨 앞 인덱스 값 빼줌 맨 앞 인덱스 증가 파이썬 해답 def max_sub_array_of_size_k(k, arr): max_sum , window_sum = 0, 0 window_start = 0 for window_end in range(len(arr)): window_sum += arr[window_end] # 다음 요소 더함. # k 길이..
[핵심 알고리즘 정리] 퀵소트 보통 내부 라이브러리는 퀵소트와 삽입 정렬을 믹스해서 만든 TIM SORT 라는 녀석으로 구현되어 있는 것으로 안다. 퀵 소트를 직접 구현할 일은 거의 없지만 문제의 구현 아이디어가 비슷하게 출제되는 경우도 있으므로 여러번 봐두면 도움이 된다. 쉬운 버전의 구현과 어려운 버전의 구현을 동시에 공부해보자. # https://www.daleseo.com/sort-quick/ 참고 URL # 시간복잡도 O(NolgN) # 거의 모든 정렬 중 제일 좋음. 기본으로 사용 # 최악이 N이라 안되는 경우 병합 정렬을 사용 # 쉽게 구현하기 def quick_sort(arr): if len(arr) pivot: # 내림차순 시 이부분 바꿔줌 right.append(num) else: equal.append(num) r..
Programmers 코딩 테스트 연습 힙(Heap) 라면공장 정답. import heapq def solution(stock, dates, supplies, k): answer, idx = 0, 0 pq = [] while stock < k: # stock과 보급 전까지 버틸 수 있는 날자는 같다. for current in range(idx, len(dates)): # idx는 소진되지 않은 dates와 stock의 idx를 의미한다. if dates[current]