Algorithm

·Algorithm
제목 : C 프로그램에서 정수, 문자열 상호변환 메서드 만들기이 글을 작성하는 이유C 에서도 문자열을 수로 바꾸는 메서드가 존재한다.이러한 내장 메서드는 어셈블리 급으로 최적화를 해 놓았고,또한 검증되었기 때문에 사용하는 것이 더 정확하고 편하다.그러나, 나는 C 언어로 알고리즘을 푸는 데 있어, 제약을 걸었다.stdio.h 내장 라이브러리를 제외한 모든 유틸리티 메서드를 "직접" 제작하는 것.물론, malloc, free, realloc, calloc 과 같은동적 메모리 할당과 해제에 필요한 메서드는 extern 으로 가져와서 사용한다.나는 이러한 제약을 스스로 걸어서, 각 라이브러리가 "어떻게" 동작하는지 이해하기 위해이러한 제약을 지키고 있다.(물론 어떤 문제들은 까마득하기도 하다.)알고리즘 문제를..
·Algorithm
제목 : C 알고리즘 문제 scanf, printf 없이 입출력 수행하기부제 : fgets, fputs 사용법이 글을 작성하는 이유처음 프로그래밍을 배울 때, 우리는 C 나 Java 로 시작한다.나 또한 C, Java 를 처음 대학교에서 접했을 때 scanf 에 해당하는 기능으로입력과 출력을 수행했다. (문자열을 통해 입력을 원하는 데이터로 변환)그러나, 내가 알고리즘을 풀 뿐만 아니라, 파일을 읽는 과정에서scanf 는 도리어 보안적으로 위험할 수도 있다는 것을 알게 되었으며,또한 동적 입력에 대해 생각보다 잘 대처하지 못한다는 것이다.그래서 왜 scanf, printf 를 사용하지 않느냐면,내가 이전에 알고리즘을 풀 때 BufferedReader 객체를 이용해서,StringTokenizer 객체에 넣..
·Algorithm
제목 : stdio.h 만 가지고 백준 문제 풀어본 결과코드 결과를 빠르게 보고 싶다면, 밑의 텍스트를 클릭하세요코드로 바로 이동하기다양한 라이브러리가 존재하는데, 굳이 힘들게 푸는 이유는?이러한 힘든 도전을 하는 이유는, "C 와 최소한의 Lib 로 알고리즘 풀어보기 도전" 썼던 글 에 상세히 적어놓았다.요약하자면, Node.js 엔진 기반의 JS 의 성능적 한계점을 느끼고, 최적화를 수행하고 구현하면서,최적화 과정이 저 수준의 언어로 제작하는 것 보다 훨씬 더 어렵다는 것을 느꼈다.이럴 거면 애초에 최적화 타겟 언어로 프로그램을 제작하는 것이 더 낫다는 판단을 했다.그리고, 특히 특정 도메인의 프로그램을 제작하기 위해 다양한 라이브러리의 역할도 알지 못한 채,쉽게 가져와서 사용하기만 해버리는 단순한 ..
·Algorithm/Sort
제목 : 삽입 정렬 (Insertion Sort) - with Java기초적인 정렬 중, $ O(N^2) $ 를 가진 방법이다.바로 직전에 선택 정렬 (Selection Sort) 에 대해서 주제를 다뤘는데,선택 정렬과 삽입 정렬은, 현재 인덱스 이전이 완벽하게 정렬 되어 있는가? 로 나뉜다고 생각한다.선택 정렬의 경우, 현재 인덱스 이전이 완벽하게 정렬되어 있다.삽입 정렬의 경우, 현재 인덱스 이전 요소들에 한하여, 해당 영역은 정렬되어 있다.하지만, 결과적으로 봤을 때 완벽하게 정렬되어 있지 않다.또 다른 관점에서 둘을 비교해 보자.Selection Sort 의 경우, i 번째 요소에 넣기 위한 "결과론적으로 완벽한" 요소를 찾는다.Insertion Sort 의 경우, i 번째 요소는 1 번째 부터,..
·Algorithm/Sort
제목 : 선택 정렬 (Selection sort) 에 대하여 - With Java가장 기초적인 정렬 중 하나이다.시간 복잡도는 $ O(N^2) $ 이다.나는 선택 정렬을 설명하기 위해 이러한 상황을 예시로 들고 싶다.상황 : 선생님이 걷어온 쪽지 시험을 학생의 고유 번호대로 상승하도록 정렬 해 달라고 부탁하셨다.그렇다면, 약 40장 정도가 존재한다고 가정한다면 나는 어떻게 정렬해야 할까?믈론 사람마다 종이를 순서대로 나열하는 데 있어 다른 방식이 있을 수도 있다.하지만, 1 번부터 찾고 왼쪽에 둔다. 그 다음 2 번을 찾아 1 번의 밑에 둔다.그리고 또 3 번을 찾고 2번의 밑에 둔다. 그리고 4번도...이러한 방식으로 1 번부터 40 번 까지 정렬 할 수 있다.이 방식이 바로 선택 정렬(Selectio..
제목 : 재귀에 대하여 - Recursive들어가며재귀란 무엇일까?재귀란, 스스로를 다시 호출하는 행위 라고 넓게 볼 수 있다.왜 다시 스스로를 호출하는 행동을 하며, 이것이 왜 필요해 졌을까?이 포스팅은 스스로 재귀 - Recursive 라는 알고리즘이 왜 필요할까에 대해서 고찰하는 게시물이다.배경막연히 프로그래밍 기초를 익히던 대학생 시절에는, 그리 중요하지 않은 개념 중 하나라고 생각했다.사실 백준 알고리즘, LeetCode 와 같은 사이트를 풀다 보면, 재귀의 용도는 간단하게 이러한 경우가 있다.Brute Force - 모든 경우의 수 or 집합을 적용시켜 답을 확인하는 기법Searching - 원하는 답이 나올 때 까지, 스스로의 코드를 다시 실행하는 기법Sorting - 모든 배열이 정렬 될 ..
코딩크리처
'Algorithm' 카테고리의 글 목록