자료구조 및 알고리즘 6

[leet code] Add Two Numbers / JAVA (with chatGPT), 단일 연결 리스트, 얕은 복사

두 개의 음수가 아닌 정수를 나타내는 두 개의 비어 있지 않은 연결 목록 이 제공됩니다 . 숫자는 역순 으로 저장되며 각 노드에는 단일 숫자가 포함됩니다.두 숫자를 더하고 그 합계를 연결된 목록으로 반환합니다.숫자 0 자체를 제외하고는 두 숫자의 첫째 자리에 0이 포함되어 있지 않습니다. Input: l1 = [2,4,3], l2 = [5,6,4]Output: [7,0,8]Explanation: 342 + 465 = 807/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode() {} * ListNode(int val) { this.val = ..

[백준] 1788 : 피보나치 수의 확장 / JAVA, dp, 재귀, 피보나치 수열

// dp[10000000]를 0으로 두고 피보나치수를 찾습니다. public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int n = Integer.parseInt(br.readLine()) + 1000000; long[] dp = new long[2000001]; dp[1000001] = 1; if (n = n; i--) { dp[i] = (dp[i+2] - dp[i+1]) % 1000000000; } } else { for (int i = 1000002..

[자료구조] 선형리스트 / 단순연결리스트 차이점 비교

1. 오버로드 리스트에 1개의 자료를 추가할 때 선형리스트 => 맨 뒤에 빈 칸을 하나 추가하고, 원하는 위치가 빌 때 까지 자료들을 한 칸씩 뒤로 이동 단순연결리스트 => 해당 위치에 링크만 추가 선형리스트의 데이터 삽입과 삭제 # 삽입 name = ['다현', '정연', '쯔위'] def insert_data(position, friend): if position len(name): print('데이터 삽입 범위 벗어남') return name.append(None)# 맨 뒤에 빈칸 추가 cur_len = len(name) # 배열의 현재 크기 for i in # 삭제 단순연결리스트의 원리 : 데이터와 링크로 구성된 노드가 연결되어 구성 # 함수 class Node()..

[알고리즘] 순열, 조합 (파이썬, C++)

조합과 순열 c++ 로 구현 https://yabmoons.tistory.com/99 https://yabmoons.tistory.com/100 저 위 블로그 주소에서 보고 알고리즘 공부중 써먹을곳이 많겠다 싶어서 작성합니다 백준 17281번 문제 푸는데 푸는법은 알겠어.. 근데 순열을 구 foameraserblue.tistory.com 파이썬으로 순열과 조합 구현하기 (+중복순열, 중복조합) + 추가가능한 부분 [순열] 서로 자리를 바꾸어 순열을 만드는 알고리즘으로 시간복잡도 최소화 [조합] n개에서 r개를 택할 때, r의 갯수를 하나씩 줄여가며 재귀로 푸는방식 (nCr = n-1Cr-1 + n-1Cr 활용 ninefloor-design.tistory.com [Python] 순열, 조합, 중복순열, 중..

[프로그래머스스쿨]자료구조/알고리즘 기초

힙 heap [자료구조] 힙(heap)이란 - Heee's Development Blog Step by step goes a long way. gmlwjd9405.github.io # 힙 이용법 from heapq import heapify, heappush, heappop lst = [5, 1, 2, 7, 4, 9, 8, 10, 3, 6] heapify(lst) # lst를 Heap으로 만들어줍니다. print(lst) # [1, 3, 2, 5, 4, 9, 8, 10, 7, 6] Heap 기준에서 바라볼 때 정렬된 모습입니다. heappush(lst, 3) # Heap에 3을 추가합니다. O(log n)이 소요됩니다. print(lst) # [1, 3, 2, 5, 3, 9, 8, 10, 7, 6, 4]..

이진탐색 사용처

가장 간단한 탐색 알고리즘은 선형 탐색 Sequential Search으로써 n개의 자료를 순서대로 하나씩 탐색하는 방법이다. 자료가 정렬된 상태에서는 이진탐색 Binary Search이 효율적이다. 이진탐색은 전체 자료의 중간에 있는 자료와 키값을 비교한다. 만약 일치하지 않는다면 찾고자 하는 자료는 앞부분 또는 뒷부분 중 어느 한 곳에 있다. (한번 탐색 후 다시 탐색할 자료 개수가 약 1/2로 줄어든다.) 예를 들어 1000개의 자료를 탐색한다면 2^10=1024이므로 최대 10번만 탐색하면 된다. 비교 결과, 키값이 가운데 있으면 인덱스 n을 반환, 왼쪽에 있으면 0~n-1, 오른쪽에 있으면 n+1~끝, 없으면 flag -1을 반환하게 한다.