알고리즘 78

[알고리즘] 링크드리스트 delete_node구현

def delete_node(self, index): if index == 0: self.head = self.head.next return # index번째 Node를 제거한다 node = self.get_node(index-1) node.next = node.next.next return "index 번째 Node를 제거해주세요!" index가 0 이면 0번째 head를 지우라는 것이므로 그것이 지워지면 바로 뒤의 head.next가 head가 되는 것이다. index가 0이 아니라면 index번째 node를 지우고 index-1번째 node 바로 다음에 index.next 노드가 와야한다 그러니까 index-1번째 노드의 next에는 원래 next의 next였던 노드가 와야한다는 것이다.

알고리즘 2021.06.13

[알고리즘] 링크드리스트 add_node구현

2021.06.13 - [알고리즘] - [알고리즘] 링크드리스트 print_all구현 [알고리즘] 링크드리스트 print_all구현 class Node: def __init__(self, data): self.data = data self.next = None node = Node(3) first_node = Node(4) node.next = first_node print(node.next.data) class LinkedList: def __init__(self, data): s.. sso-feeling.tistory.com # index번에 value를 가진 Node를 연결해라 def add_node(self, index, value): new_node = Node(value) if index ==..

알고리즘/이론 2021.06.13

[알고리즘] 문자열 뒤집기 python

# Q. # 0과 1로만 이루어진 문자열이 주어졌을 때, # 이 문자열에 있는 모든 숫자를 전부 같게 만들려고 한다. # 할 수 있는 행동은 문자열에서 연속된 하나 # 이상의 숫자를 잡고 모두 뒤집는 것이다. # 뒤집는 것은 1을 0으로, 0을 1로 바꾸는 것을 의미한다. # 예를 들어 S=0001100 일 때, # 전체를 뒤집으면 1110011이 된다. # 4번째 문자부터 5번째 문자까지 # 뒤집으면 1111111이 되어서 2번 만에 모두 같은 숫자로 만들 수 있다. # 하지만, 처음부터 4번째 문자부터 5번째 문자까지 # 문자를 뒤집으면 한 번에 0000000이 되어서 # 1번 만에 모두 같은 숫자로 만들 수 있다. # 주어진 문자열을 모두 0 혹은 모두 1로 같게 만드는 # 최소 횟수를 반환하시오...

알고리즘/이론 2021.06.12

[알고리즘] 소수 나열하기/ 소수 찾기

# Q. 정수를 입력 했을 때, # 그 정수 이하의 소수를 모두 반환하시오. # 소수는 자신보다 작은 두 개의 자연수를 곱하여 # 만들 수 없는 1보다 큰 자연수이다. input = 20 # 소수는 자기 자신과 1외에는 아무것도 나눌 수 없다. def find_prime_list_under_number(number): prime_list = [] for n in range(2, number + 1): #2부터 number까지 반복 for i in range(2,n): #2부터 number-1까지 반복 if n % i == 0: break else: prime_list.append(n) return prime_list result = find_prime_list_under_number(input) prin..

알고리즘/이론 2021.06.12

[알고리즘] 더하기 or 곱하기 python

input = [0, 3, 5, 6, 1, 2, 4] # Q. 다음과 같이 0 혹은 양의 정수로만 이루어진 배열이 있을 때, # 왼쪽부터 오른쪽으로 하나씩 모든 숫자를 확인하며 # 숫자 사이에 '✕' 혹은 '+' 연산자를 넣어 결과적으로 # 가장 큰 수를 구하는 프로그램을 작성하시오. # 단, '+' 보다 '✕' 를 먼저 계산하는 일반적인 방식과는 달리, # 모든 연산은 왼쪽에서 순서대로 이루어진다. # 숫자가 0이나 1이면 더하는게 이득이다 # sum이 0이나 1이면 더하는게 이득이다. def find_max_plus_or_multiply(array): multiply_sum = 0 for number in array: if number

알고리즘 2021.06.12

[알고리즘] 공간복잡도 파악하기

2021.06.12 - [알고리즘] - [알고리즘] 시간 복잡도 판단하기 [알고리즘] 시간 복잡도 판단하기 시간 복잡도란? 입력값과 문제를 해결하는데 걸리는 시간과의 상관관계이다. 입력값이 2배로 늘어났을때 문제 해결하는데 걸리는 시간은 몇배로 늘어날까? 입력값이 늘어나도 걸리는 시간은 덜 sso-feeling.tistory.com 공간복잡도란? 입력값과 문제를 해결하는데 걸리는 공간과의 상관관계이다. 입력값이 2배로 늘어났을때 문제를 해결하는데 걸리는 공간은 몇배로 늘어나는지를 보는 것이다. 입력값이 늘어나도 공간이 덜 늘어나는게 좋은 알고리즘이다! 저장하는 데이터의 양이 1개의 공간을 차지한다고 생각하고 계산한다 def find_max_occurred_alphabet(string): alphabet_..

알고리즘/이론 2021.06.12

[알고리즘] 시간 복잡도 판단하기

시간 복잡도란? 입력값과 문제를 해결하는데 걸리는 시간과의 상관관계이다. 입력값이 2배로 늘어났을때 문제 해결하는데 걸리는 시간은 몇배로 늘어날까? 입력값이 늘어나도 걸리는 시간은 덜 늘어나는 것이 좋은 알고리즘이다! 각 줄이 실행되는 걸 1번의 연산이 된다라고 생각하고 계산한다 위 코드에서 연산을 보면 array의 길이 * array의 길이 * 비교 연산 1번 그러면 N * N 만큼의 시간만큼 걸렸다고 할 수 있다. 위 코드에서 연산을 보면 max_num에 array[0]을 넣는 대입연산 1번 + array의 길이 * (비교연산1번 + max_num에 num을 넣는 대입연산 1번) 1 + N( 1+1) = 1 + 2N 이 시간 복잡도는 n이 커질수록 확연한 차이가 난다. 상수는 고려하지 않아도 된다. ..

알고리즘 2021.06.12

[알고리즘] 문자열에서 알파벳 중에 가장 많이 나온 알파벳 찾기/ 최빈값 찾기 python

"hello my name is sparta" 이라는 문자열에 어떤 알파벳이 제일 많이 사용되었을까? 2021.06.12 - [알고리즘/이론] - [알고리즘] 최댓값 찾기 python input = "hello my name is sparta" # 문자를 숫자로 변하는 법 # ord(a) # 숫자를 문자로 변하는 법 # chr(숫자) def find_max_occurred_alphabet(string): alphabet_occurrence_array = [0] * 26 for char in string: if not char.isalpha(): continue arr_index = ord(char) - ord('a') alphabet_occurrence_array[arr_index] += 1 max_oc..

알고리즘/이론 2021.06.12