자료구조와 알고리즘
-
배열자료구조와 알고리즘/문제풀기 2024. 1. 12. 10:07
-> 다시 도전 (물방울 가두기, 자신을 제외한 곱셈, 3더하기) -> 투포인터로 문제 해결하는 방식 조금 배웠다 (물방울 가두기,3더하기..) -> 중복값 계산하기 귀찮으면 Map에다가 key로 때려 박으면 쫌 다루기 쉬울 때가 있다. -> map.containsKey, Arrays.asList, new ArrayList(map.values()) 야무지게 외워둡시다. > 물방울 가두기 (리트코드 - 42) 1. 내 풀이(3ms) public int trap(int[] height) { int maxHeight = Arrays.stream(height).max().getAsInt(); int rainWidth=0; int left = 0; int right = height.length - 1; int l..
-
문자열자료구조와 알고리즘/문제풀기 2024. 1. 10. 18:41
- 팰린드롬을 검사하는 간단한 문제이다. - 단 문자열과 숫자만 비교해야한다. > Leetcode (125) - 유효한 팰린드롬 나의 풀이 (13ms) public boolean isPalindrome(String s) { s = s.toLowerCase(); s = s.replaceAll("[^a-z0-9]",""); int left = 0; int right = s.length()-1; for(int i=0; i right){ return true; } if(s.charAt(left) == s.charAt(right)){ left++; right--; }else{ return false; } } return true; } 1. 문자 단위로 추출해서 처리 (2ms) public boolean isPal..
-
자알인 (1) 코딩테스트 팁자료구조와 알고리즘/알고리즘 2024. 1. 3. 00:56
- 연습장과 필기도구를 준비하는 것이 좋다 - 코드 스피넷을 만들어두면 좋다 : 본인이 어려웠던 알고리즘 위주, 복습과 원리를 학습하는 차원에서도 좋고, 사용할 수 있다면, 빠르게 가져올 수 있음 - 타임아웃오류 : 자바는 거의 자유로우나, 자바의 컬렉션을 사용하면 타임아웃이 발생하는 경우도 있으니 조심하자 - 예외처리 조심하자 (null값 참조 등 -> 실수하는경우 종종 발생) - 본인만의 시간제한을 두고 푸는 연습을 하는 편이 좋다 - REPL로 코드를 검증하는 연습도 해두면 좋다고함! 2. 자바 자료형 -> 속도면에서 당연히 원시자료형이 연산이 빠름 ex) 배열에 데이터 1억개 집어넣고, 찾는 연산 -> 원시(int -> 삽입:128밀리초,탐색:26밀리초, Integer:847밀리초, 46밀리초) ..
-
정렬 알고리즘자료구조와 알고리즘/자료구조 2023. 9. 20. 17:46
1. 버블정렬 // int[] arr를 정렬한다고 가정 for(int i=0; i 0 ){ arr[dataIdx] = arr[getParent(dataIdx)]; dataIdx = getParent(dataIdx); }else break; } arr[dataIdx] = data; num++; } public int delete(){ int Dedata = arr[1]; int lastData = arr[num]; int DataIdx = 1; int child; while(true){ child = getHipriorityChildIdx(DataIdx); if(child == 0 && com.compare(lastData,arr[child]) >= 0) break; arr[DataIdx] = arr[ch..
-
SQL 고득점 킷 JOIN자료구조와 알고리즘/문제풀기 2023. 9. 1. 12:49
1. 주문량이 많은 아이스크림 구하기 - 내 코드 -- -- 코드를 입력하세요 -- 토탈 오더 더한 거 TOP -N 구해야함 -- FIRST_HALF 기본기 : 맛 , 외래키 SHIPMENT_ID -- JULY 기본기 SHIPMENT_ID 외래키 맛 -- => JULY를 맛 별로 그룹해서 일단 맛별 토탈 오더 구하고 -- > FIRST_HALF와 맛별로 조인 + 토탈 오더를 더한다. 이를 정렬한다. -- > 여기서 ROWNUM 3까지 구함 WITH JY as (SELECT SUM(TOTAL_ORDER) TOTAL_ORDER ,FLAVOR FROM JULY GROUP BY FLAVOR) SELECT FLAVOR FROM (SELECT jy.FLAVOR, jy.TOTAL_ORDER + fh.TOTAL_ORD..
-
우선순위 큐와 힙자료구조와 알고리즘/자료구조 2023. 5. 18. 06:34
1. 우선순위 큐란 > 데이터가 삽입된 순서와 상관없이 우선순위가 높은 데이터가 먼저 나온다. > 데이터의 우선순위는 우선순위 큐를 구현하면서 임의로 설정하도록 한다. > 우선순위 큐는 배열, 연결리스트, 힙(heap)등을 이용하여 구현할 수 있는데 일반적으로 힙을 이용한다. 2. 힙 > 완전 이진 트리이다. > 부모노드와 자식노드간 대소관계가 있다. > 이진탐색트리와 달리 중복 값을 허용한다. 최대힙 :루트노드로 올라갈수록 저장된 값이 커지는 완전 이진 트리를 말한다. 최소힙: 루트노드로 올라갈수록 저장된 값이 작아지는 완전 이진 트리를 말한다. 3. 힙의 구현 및 우선순위 큐 완성 - 힙의 데이터 저장: 새로운 데이터는 우선순위가 제일 낮다는 가정하에 마지막 위치에 저장 적절한 위치를 찾을 때 까지 ..
-
Tree - 수식 트리 (Expression Tree)자료구조와 알고리즘/자료구조 2023. 5. 16. 12:05
앞 서 만든 이진트리를 만드는 도구를 활용하여 이진트리 구조 중 하나인 수식트리를 만들어보자 1. 수식트리란? 중위,후위,전위 표기법과 같은 여러가지 표기법 중 하나로 메모리에 수식을 표기하는 방식이다. 루트 노드에 연산자를, 두 개의 자식노드에 피연산자를 두어 연산이 진행된다. 이를 그림으로 표기하면 위와 같다. 이러한 수식트리의 장점은 한번 트리를 완성해두면, 중위,후위,전위 표기법으로 쉽게 전환할 수 있다. 2. 구현 중위표기법을 바로 수식트리로 나타내는 것보다 중위표기법을 후위표기법으로 전환한 뒤에 수식트리로 나타내는 것이 간편하므로, 여기서는 후위표기법을 수식트리로 변환하는 과정만 보일 것이다. 수식트리를 표현하기 위한 도구 : 1. Stack, 2 BTree 헤더 #ifndef __EXPRES..
-
Tree - 이진 트리의 구현과 순회자료구조와 알고리즘/자료구조 2023. 5. 15. 22:48
1. 배열? 연결리스트? 이진트리는 배열로 구현할 수도 있고 연결리스트로 구현할 수 도 있다. 이때 트리가 완성 된 후 빈번한 탐색이 이루어지는 등 특정한 필요에 따라 배열로 구현할 수 있지만 (ex heap) 일단 연결리스트로 구현해 보자. 2. 이진 트리의 ADT BTreeNode* MakeBTreeNode(void) - 이진 트리 노드를 생성하여 그 주소 값을 반환 BTdata GetData(BtreeNode*bt) - 노드에 저장된 데이터를 반환 void SetData(BTreeNode*bt, BTdata data) - 노드에 데이터를 저장함 BTreeNode* GetLeftSubTree(BTreeNode* bt) - 왼쪽 서브트리의 주소를 반환 BTreeNode* GetRightSubTree(B..