0920 TIL

looggi·2022년 9월 21일
1

스파르타 내배캠 AI-3

목록 보기
18/130
post-thumbnail

최빈값 찾기 피드백

input_ = "sparta coding club ccc"


def find_max_occurred_alphabet(string):
    alphabet_occurrence_array = [0] * 26
    #string = ''.join(string.split())
    #string.replace(' ','') 공백을 빈 문자로
    string.replace(' ','')
    for i in range(len(string)):
        alphabet_occurrence_array[ord(string[i]) - ord('a')] += 1
    #max 값을 찾아서 변수 하나에 넣어줘야 맥스 함수가 계속 실행되는 걸 막을 수 있다
    #복잡한 알고리즘을 풀면 for문에서 타임아웃 되는 경우가 많아서
    #내장함수를 쓸 수 있으면 for문 보다 내장함수를 쓰는 게 더 좋음
    # for i in range(len(alphabet_occurrence_array)):
    #     if alphabet_occurrence_array[i] == max(alphabet_occurrence_array):
    #         return chr(i + ord('a'))
    #14-16번째 줄을 아래와 같이 바꿀 수 있다
    max_alphabet_occurrence = max(alphabet_occurrence_array)
    return ____.index(max_alphabet_occurrence)
    #1:1 대응되는 알파벳리스트가 없으면....그래도 그렇게 대응되는 리스트를 만드는 편이 더 좋다.!


result = find_max_occurred_alphabet(input_)
print(result)

알고리즘과 자료구조🌷

답 보면 이해는 가는데 코드는 못짜겠다... ㅠㅠ 2주차 살려줘..

  • get_node
def get_node(self,index):
    node = self.head 
    # 이닛함수에 들어간 밸류가 처음 노드 데이터에 담겨서 노드Node(value)가 됨. 그 노드를 node에 담은 것
    count = 0
    while count < index: # 입력된 인덱스보다 횟수가 적으면 node.next를 node에 넣음
        node = node.next
    return node # get_node함수니까 당연히 노드를 반환해야함

print(linked_list.get_node(0).data)
#.data를 안붙여주면 그냥 node object 반환
  • add node
# index번째 value추가
    def add_node(self, index, value): 
        new_node = Node(value)
        if index == 0:
            new_node.next = self.head # 먼저 이전의 헤드노드를 저장해 주고!!
            self.head = new_node # 새로운 노드를 헤드에 넣어준다
            return
       # new_node = Node(value) # 받은 값을 새로운 노드에 저장(if 문 추가하면서 위로 옮김)
        node = self.get_node(index - 1) # 현재노드
        next_node = node.next # 넥스트 노드 변수에 <현재 노드의 다음 노드>에 저장
        node.next = new_node # 새로운 노드값을 <현재 노드의 다음 노드>에 저장
        new_node.next = next_node #넥스트 노드에 저장된 <현재 노드의 다음 노드>값을 새로운 노드의 다음노드에 저장 
                                 #결과적으로 뉴노드가 현재노드 인덱스에 저장된건 아님. 그냥 다음 노드가 현재노드와 같을 뿐>> 그래서 index-1바꿈
       # 리턴을 할 게 없음
  • delete node
def delete_node(self, index): 
        if index == 0:
            self.head = self.head.next
            return

        node = self.get_node(index-1)
        node.next = node.next.next

  • 재귀함수는 탈출조건이 필수!
def count_down(number)
	if number < 0:
    return
    print(number)
    count_down(number-1)
  • 이분탐색은 정렬이 필수!
  • 마지막에서 k번째 노드 찾기
def get_kth_node_from_last(self, k):
    length = 1  # 시작 노드의 길이를 세기 위해 1부터 시작합니다
    cur = self.head

    while cur.next is not None:
            cur = cur.next
            length += 1
    end_length = length - k
    cur = self.head #while문에서 변경된 cur 값 아님
    for i in range(end_length):
        cur = cur.next
    return cur
profile
looooggi

0개의 댓글