Problem Solving/알고리즘 개념 (7) 썸네일형 리스트형 [hackerrank python] string validatiors s = input() print(s.isalnum()) if s.isalnum() and not s.isdigit(): print(True) else: print(False) if s.isalnum() and not s.isalpha(): print(True) else: print(False) # print(not s.isdigit()) # print(not s.isalpha()) if s.isalnum() and not s.isdigit(): print(not s.isupper()) else: print(False) if s.isalnum() and not s.isdigit(): print(not s.islower()) else: print(False) 테스트케이스에 특수기호가 포함되어있는지 모르고 했.. [hackerrank python] string validations s = input() print(s.isalnum()) if s.isalnum() and not s.isdigit(): print(True) else: print(False) if s.isalnum() and not s.isalpha(): print(True) else: print(False) # print(not s.isdigit()) # print(not s.isalpha()) if s.isalnum() and not s.isdigit(): print(not s.isupper()) else: print(False) if s.isalnum() and not s.isdigit(): print(not s.islower()) else: print(False) 테스트케이스에 특수기호가 포함되어있는지 모르고 했.. Hash Algorithm(해시 알고리즘) 해시 알고리즘은 인덱스(색인)를 사용하는 검색 알고리즘으로 검색 성능이 O(1)이기 때문에 데이터의 양과 관계 없이 빠른 성능이 장점이다. - 키 주소 검색 알고리즘 (Key-Addressing) 키 주소 검색 알고리즘은 배열의 인덱스만 알면 비교나 검색할 필요 없이 데이터에 해당하는 값을 출력할 수 있다. 위에서 _NODE형의 구조체 NODE를 선언했고, 100개의 NODE를 배열로 갖는 Students를 선언했다. 이때 Students의 인덱스가 짝수인 경우에만 Number와 Name을 저장했기 때문에 전체 100개의 배열 중 50개의 배열에만 데이터를 저장했다. 이와 같이 키-주소 검색 알고리즘은 메모리 공간을 효율적으로 사용할 수 없다는 단점이 있다. - 키 매핑 검색 알고리즘 (Key-Mappi.. [정렬 알고리즘] 퀵 정렬(Quick sort), 기수 정렬(Radix sort) 알고리즘 퀵 정렬 알고리즘 퀵 정렬 알고리즘은 피봇이라는 기준 데이터를 다른 데이터와 비교하는 과정을 재귀적으로 반복하여 정렬한다. (분할 정복 알고리즘 중 하나) 퀵 정렬 알고리즘은 반복문 하나만 사용하는 대신 재귀 호출을 사용해 데이터를 두 그룹으로 분할해서 정렬한다.(피봇의 왼쪽그룹, 피봇의 오른쪽그룹) 퀵 정렬 알고리즘의 핵심이 되는 코드는 아래와 같다. 여기서 left는 정렬할 데이터의 가장 왼쪽 인덱스를, right는 가장 오른쪽 인덱스를 가리킨다. left가 right보다 클 때에만 QuickSort가 실행된다. 즉 left Shell Sort Algorithm (셸 정렬 알고리즘) Shell Sort Algorithm (셸 정렬 알고리즘) 은 삽입 정렬 알고리즘의 단점을 극복하기 위해 일부를 개선한 정렬 알고리즘이다. 정렬 방법은 정렬할 데이터를 일정한 구간별로 쪼개고 해당 구간 안에서 먼저 데이터를 정렬한 후 쪼갠 구간을 합해서 정렬한다. 일정 그룹으로 나누고 그룹 안의 정렬이 완료된 후 전체를 정렬하므로 비교 횟수나 데이터의 이동 횟수가 삽입 정렬 알고리즘에 비해 훨씬 적다. 아래는 shellsort 알고리즘의 가장 핵심이 되는 부분이다. (전체 코드는 첨부파일에 있습니다.) 38행의 첫번째 for문에서는 h가 1, 4, 13, 40, 121 순서로 증가하고 121이 될 때 위의 for문을 탈출하고 아래 for문을 실행한다. 이후 40행과 41행의 for문에서 처음으로 대입되는.. 최소 신장 트리 : Kruskal(크루스칼) 알고리즘과 Prim(프림) 알고리즘 앞서 자료구조에서 그래프에 대한 기본적인 개념과 최소 신장 트리에 대해서 공부를 했습니다. 이번에는 최소 신장 트리를 구현할 수 있는 대표적인 두 가지 방법에 대해서 알아보겠습니다. 신장 트리는 모든 노드가 간선으로 연결되어 있어야 하지만, 사이클이 존재하면 안됩니다. 그리고 최소 신장 트리는 연결된 간선들의 가중치의 합이 최소가 되는 신장 트리입니다. 크루스칼 알고리즘과 프림 알고리즘 모두 최종적으로 연결된 간선의 수는 (노드의 개수-1) 개입니다. 1. Kruskal(크루스칼) 알고리즘 크루스칼 알고리즘은 그래프의 모든 간선을 가중치 순으로 정렬한 다음, 낮은 가중치를 가지는 간선을 차례대로 선택하여 신장 트리를 완성해나가는 방법 간선을 가중치 순으로 정렬하는 방법에는 선택 정렬, 버블 정렬, 삽입 .. [정렬 알고리즘] 선택 정렬 / 삽입 정렬 / 버블 정렬 안녕하세요~~앞으로 알고리즘 관련한 책을 몇 권 정도 읽고 실습하는 형태로 스터디를 진행하려고 합니다.6월에는 공부한 내용을 바탕으로 뭔가 만들어보려고합니다.많이 부족한 실력이라 열심히 해야할 것 같아요 ㅎㅎ제가 올린 글에 잘못된 부분이 있다면 알려주시면 감사하겠습니다. 처음으로 정한 책은 "알고리즘 문제 풀이 전략 (조중필 외, 한빛미디어)"이라는 책입니다.예제 소스는 www.hanbit.co.kr/exam/2270 에서 다운받으실 수 있습니다. 그럼 오늘은 첫 번째로 가장 기본적인 정렬 방법 3가지를 C언어로 구현해보겠습니다. 1. 선택 정렬 알고리즘 선택 정렬 알고리즘은 데이터의 처음부터 끝까지 쭉 읽고, 가장 작은 값은 첫 번째 자리에 있는 데이터와 바꾸고, 다음으로 작은 값을 두 번째에 있는 데.. 이전 1 다음