전체 글 241

배달 가능 여부 출력하기

문제 해결방법 shop_menus = ["만두", "떡볶이", "오뎅", "사이다", "콜라"] shop_orders = ["오뎅", "콜라", "만두","튀김"] def is_available_to_order(menus, orders): # menus_set = set(menus) for order in orders: if order not in menus: return False return True result = is_available_to_order(shop_menus, shop_orders) print(result) for문으로 메뉴의 값을 하나씩 돌면서 주문이 들어온 메뉴의 값이 메뉴에 없다면 바로 False를 반환하고 모두 있다면 True를 반환한다. 만약 메뉴가 중복되는 것이 몇번 있다면..

뒤에서 k번째 노드 값(data) 출력하기

노드의 맨 끝까지 돌아 노드의 길이를 알아낸 후 노드의 길이에서 뒤에서 몇 번째 노드를 출력해야하는 지 그 값(k값)을 빼서 노드의 인덱스를 찾아 for문을 인덱스 번호만큼 돌리면서 노드를 이동해 준 후 그 노드의 값을 출력해준다. class Node: def __init__(self, data): self.data = data self.next = None class LinkedList: def __init__(self, value): self.head = Node(value) def append(self, value): cur = self.head while cur.next is not None: cur = cur.next cur.next = Node(value) def get_kth_node_fro..

이진 탐색 구현하기

이진탐색 이진 탐색은 원하는 값 (target)을 찾기 위해 하나씩 순차적으로 탐색하지 않고, 최솟값과 최댓값을 더해 그것을 2로 나눈 값(반으로 나눈 값)을 구해 그것보다 값이 클 경우 찾는 범위를 더 큰 곳에서 찾아가고, 작은 경우 찾는 범위를 더 작은 곳에서 찾아가면서 반씩 쪼개서 찾는 방식 (up &down게임을 생각하면 쉽다 !! ) 이진 탐색의 시간 복잡도는 O(log n)이며, 정렬이 된 데이터들로만 실행할 수 있다. finding_target = 16 finding_numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16] def is_existing_target_number_binary(target, array): # 최댓값은 배..

백준 1157번 단어공부

문제 1. 첫 번째 해결방법 데이터를 리스트에 입력받은 후 알파벳과 하나씩 비교해가면서 개수를 인덱스에 넣어준다. 그 후 가장 많이 나온 알파벳의 개수와 가장 많이 나온 알파벳의 인덱스를 구해서 가장 많이 나온 알파벳의 개수를 카운트 해서 2개 이상 이라면(많이 나온 알파벳의 개수가 1개가 아니라 2개 이상 일 경우) ?를 출력하고, 1개라면 대문자로 문자를 출력해준다. data = input() data = list(data.lower()) result = [0]*26 alphabet = 'abcdefghijklmnopqrstuvwxyz' for i in alphabet: for j in data: if j == i: idx = ord(i) - ord('a') result[int(idx)] +=1 #많..

Algorithm/백준 2022.03.18

백준 2675번 문자열반복

문제 1. 첫 번째 방법 먼저 입력받을 횟수를 받은 후 split을 사용하여 입력 값을 공백을 기준으로 나눠 받는다.' 이렇게 입력을 받으면 a에는 3과 5, b에는 ABC와 /HTP가 담긴다. 그 후 b를 a번 출력해야 하므로 이중 for문을 만들어 b를 a번만큼 돌리면서 형식에 맞게 출력해준다. num = int(input()) for i in range(num): a,b = input().split() cnt = int(a) for i in range(len(b)): for j in range(cnt): # 결과가 한 줄에 나오도록 출력 print(b[i],end='') # 결과가 나온 후 줄바꿈 print('') 주의할 점 : a값을 int로 변환해주지 않으면 str로 인식하여 에러가난다. 2. ..

Algorithm/백준 2022.03.17

연결 리스트 합 구하기

문제 연결리스트를 구현 한 후 각 노드들의 계산 결과를 구하는 함수를 따로 만들어 연산을 수행 하였다. class Node: def __init__(self, data): self.data = data self.next = None class LinkedList: def __init__(self, value): self.head = Node(value) def append(self, value): cur = self.head while cur.next is not None: cur = cur.next cur.next = Node(value) # 리스트의 합을 계산하는 함수 def calc_linked_list(linked_list): list_sum = 0 head = linked_list.head wh..

백준 10809번 알파벳찾기

문제 1. 첫 번째 해결방법 결과를 출력할 알파벳 크기의 배열을 만든 후 디폴트 값으로 -1을 넣어준 후 입력받은 알파벳의 인덱스에 처음 위치를 넣어서 형식에 맞게 출력하는 방법 # 입력받기 data = input() alphabet = ['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'] result = [0] * 26 # 결과 값을 나타 낼 배열을 만들고 디폴트 값으로 -1을 넣어주기 for i in range(len(alphabet)): result[i] = -1 # result 배열에 각 데이터가 처음 나온 위치 차례로 넣어주기 for char in alphabe..

Algorithm/백준 2022.03.17

연결 리스트 추가,삭제,삽입 구현

노드를 추가하거나 삭제할 때 필요한 노드는 추가하거나 삭제하기 위한 index 보다 1 적은 위치가 필요하다 이전 노드의 다음 위치에 삽입 할 새 노드를 연결하고, 그 후 이전 노드의 다음노드를 새 노드의 다음 노드로 연결하여 데이터를 추가할 수 있고, index 번째 노드를 무시하고, 이전 노드와 이전 노드의 다음 노드를 이어 붙임으로써 노드를 삭제할 수 있다. # 노드 생성 (데이터와 다음 정보를 표시) class Node: def __init__(self, data): self.data = data self.next = None # 연결리스트를 만들기 위해 head 정보를 먼저 선언 class LinkedList: def __init__(self, data): self.head = Node(data..

백준 11720번 숫자의합

문제 두 번째 줄에 입력받는 숫자를 하나씩 쪼개서 저장 한 후 그 값들을 차례대로 하나씩 저장해서 출력한다. a = int(input()) b = list(input()) sum = 0 for i in b: sum += int(i) print(sum) 첫 번째 줄은 정수를 입력받아야 하므로 int로 입력을 입력을 받아주고, 두 번 째 줄의 입력은 각 숫자를 하나씩 쪼개서 저장해주어야 하기 때문에 list로 입력을 받는다. 그 후 덧셈을 수행할 변수를 만들어 for문을 돌면서 각 값을 하나씩 더한 후 그 값을 출력한다.

Algorithm/백준 2022.03.14