알고리즘15 Fast I/O(정수 혹은 정수 배열) 📌 Fast I/O 알고리즘 문제를 풀다 보면 외적으로 최적화가 필요한 경우가 종종 생긴다. 그래서 빠른 입출력에 대해 고민해야할 필요가 종종 있다. ✔️ Scanner() 의 문제점 Scanner가 느린 가장 큰 이유는 정규 표현식의 남용이다. Scanner.nextInt()는 내부적으로 아래와 같은 정규 표현식을 만족하는 입력을 찾으려 한다. (([-+]?(((((?i)[0123456789]|\p{javaDigit})++)|([\p{javaDigit}&&[^0]]((?i)[0123456789]|\p{javaDigit})?((?i)[0123456789]|\p{javaDigit})?(\,((?i)[0123456789]|\p{javaDigit})((?i)[0123456789]|\p{javaDigit})((.. 2022. 8. 20. 이진 탐색 알고리즘(Binary Search Algorithm) 📌 이진 탐색 알고리즘 이진 탐색 알고리즘(Binary Search Algorithm)은 데이터가 정렬된 상태에서 절반씩 범위를 나누는 분할 정복 기법으로 특정한 값을 찾아내는 알고리즘이다. 구글에서 어떤 정보를 검색할 때, 만약 웹상의 정보가 정렬되어 있지 않다면 어떨까? 웹상의 정보들은 양이 너무나 방대하기 때문에 정렬하지 않은 상태의 정보를 찾기란 불가능에 가깝다. 구글에서는 관련선이 높은 검색 결과를 정리해두고 원하는 정보를 찾도록 제시하는 방법을 사용한다. 이처럼 검색 알고리즘은 수많은 데이터 중에서 원하는 데이터를 좀 더 빠른 시간 안에 찾아내기 위해 사용한다. 컴퓨터 과학에서 사용되는 여러 탐색 알고리즘 중 단순하게 구현할 수 있는 이진 탐색 알고리즘에 대해 알아보자. 📌 이진 탐색 알고리즘.. 2022. 7. 29. 완전 탐색 알고리즘(Brute-Force Algorithm) 📌 완전 탐색 알고리즘 완전 탐색 알고리즘(Brute-Force Algorithm)이란 순전히 컴퓨터의 성능에만 의존하여 모든 가능성을 시도하여 문제를 해결하는 방법을 말한다. 최악의 시나리오를 취하더라도 솔루션을 찾기 위해 사용하는 방법이다. 컴퓨터 과학에서 Brute Force는 시행착오 방법론을 의미한다. 공간복잡도와 시간복잡도의 요소를 고려하지 않고 순전히 컴퓨터의 성능에 의존한다. 암호학에서도 완전 탐색은 많이 사용된다. 흔히 Brute Force Attack이라고 불리며, 특정한 암호를 풀기 위해 모든 값을 대입하는 방법이다. 수많은 시행착오를 통해 민감한 데이터를 해킹한다. 무차별 대입 공격이 다른 해킹 방법과 다른 점은 지능형 전략을 사용하지 않는다는 점이다. 예를 들어 0-9 사이의 4자.. 2022. 7. 29. 3. 링크드 리스트(Linked List) 📌 링크드 리스트(Linked List) Linked List 자료구조는 선형으로 그룹화된 데이터의 집합으로, 데이터와 다음 데이터의 주소를 포함하고 있는 하나의 노드가 선형으로 이루어진 자료구조이다. 링크드 리스트 자료구조는 연속된 공간이 아니라 흩어져 있는 공간에 노드들의 연결로 이루어진 자료구조이다. 하나의 노드에는 데이터와 다음 노드의 주소가 담겨있다. 그리고 각 노드는 다음 노드를 가리킨다. 연속된 메모리 주소가 아니기 때문에 직접 주소 값을 가지고 있어야 다음 노드에 접근할 수 있다. 배열과 링크드 리스트를 메모리에 표시하면 아래 이미지와 같다. 각각의 메모리 주소는 순차적이지 않고 다음 메모리 주소를 가리킨다. 마지막노드는 다음을 가리킬 곳이 없으므로 새로 추가되기 전까지는 null을 가리킨.. 2022. 7. 26. 이전 1 2 3 4 다음