전체 글 244

알고리즘 작성 방법

분할 정복(Divide and Conquer) 분할 정복(divide and conquer)이란 해결해야 될 문제를 작은 단위로 나누어 더 이상 나눌 수 없어지는 단계가 되면 그 단계에서 문제를 해결하고 이를 통해 본래 문제로 거슬러 올라가는 방식의 문제해결 방법이다. 때로는 가장 작은 단계의 해답이 본래 문제의 해답이 되기도 한다. 분할 정복의 사용 예시로는 합병 정렬(merge sort)가 있다. 동적 계획법(Dynamic Programming) 동적 계획법(Dynamic Programming)은 문제를 분할한다는 점에서는 분할 정복과 같지만 이전 문제의 해답을 이용하여 다음 문제를 푼다는 점에서 분할 정복과의 차이점을 보인다. 팩토리얼을 예로 들어 설명하도록 하겠다. 우리가 10!의 해답을 구하면 ..

자료구조 2022.02.17

재귀 알고리즘과 반복 알고리즘

반복 알고리즘(loop algorithm) 반복 알고리즘(loop algorithm)이란 for, while과 같은 반복문을 이용하여 문제를 해결하는 알고리즘을 말한다. 반복문을 이용한 알고리즘으로는 1부터 100까지 더하는 합 알고리즘이 있다. 재귀 알고리즘(recursive algorithm) 함수는 자기 자신을 내부에서 호출할 수 있다. 이러한 함수를 재귀 함수라고 한다. 재귀 알고리즘(recursive algorithm)이란 재귀 함수를 이용하여 문제를 해결하는 알고리즘을 말한다. 재귀 알고리즘은 팩토리얼이나 피보나치 수열등에 쓰인다. 재귀 함수와 반복문의 차이 재귀 함수와 반복문은 속도나 작동 방식에서 차이가 난다. 반복문은 프로그래머가 지정해준 초기값, 조건값, 증감값을 통해 반복을 제어하고 ..

자료구조 2022.02.17

Big-O 표기법과 시간 복잡도 함수

앞선 포스팅에서 Big-O표기법에 대해 간략하게 설명한 적이 있다. 여기서는 Big-O표기법에 대해 좀 더 자세한 설명과 함께 Big-O표기법을 나타내는 대표적인 함수와 여러가지 연산 규칙에 대해 설명 하려고 한다. Big-O 표기법이란?(what is Big-O notation?) Big-O 표기법은 알고리즘의 점근적 상한을 나타내는 표기법이다. 즉, 알고리즘이 최악의 상황에서 작동할 경우, 표기한 증가 함수와 유사한 방식으로 증가함을 나타내는 것이다. Big-O 표기법의 수학적 정의는 다음과 같다. 정의 n ≥ n0인 모든 n에 대해 f(n) ≤ c · g(n)를 만족하는 양의 상수 c와 n0가 존재하면 f(n) = O(g(n))이다. 정의를 좀 더 쉽게 이해하기 위해서 예시를 통해 정의를 설명해 보..

자료구조 2022.02.16

알고리즘 성능 분석

알고리즘 성능 분석 (Performance Evaluation of Algorithm) 알고리즘은 문제 해결을 하기 위한 레시피와 같다. 그러나 레시피는 세상에 하나만 존재하지는 않는다. 음식을 만들 때 각자의 방식이 있듯이 하나의 문제에 대한 알고리즘도 다양하게 나올 수 있다. 우리가 1부터 100을 더할 때 정말로 1부터 100을 다 더할 수 있지만 공식을 통해 빠르게 풀어낼 수도 있다. 다양한 알고리즘들 중에 문제를 비효율적으로 해결하는 알고리즘을 가지고 문제를 해결하고 싶은 사람은 없을 것이다. 그렇기에 어떤 기준을 가지고 알고리즘을 평가하게 되는데 그 기준이 공간 복잡도(space complexity)와 시간 복잡도(time complexity)이다. 공간 복잡도(Space Complexity)..

자료구조 2022.02.15

2022 02 15 나의 일기

오늘의 기분 좋은 일이 일어났다. 공부하는 도중 영어로 된 수학적 정의를 사용해야될 일이 있어서 찾아봤는데 영어로는 이해가 되는데 도무지 한글로는 딱히 생각이 나지 않는 것이다. 가끔 원서vs번역본 글을 찾아보는데 대부분 사람들이 영어에 익숙하면 영어로 찾아보는게 더 이해하기 쉽다고 했다. 오히려 이걸 한글로 바꾸려고 하면 더 어렵다는 말을 많이 봤다. 나는 그런 수준에 올라간 사람들은 얼마나 공부를 했길래 그랬을까와 함께 나도 영어 그대로 알아먹는 날이 왔으면 좋겠다는 생각도 들었다. 근데 요즘 그게 슬슬 된다. 물론 한국어로 되어있으면 아주 이해하기 편하지만 영어로 된 글도 점점 읽는 속도가 빨라지고 있다. 계속해서 영어로 된 문서를 읽어야겠다. 언젠가 영어로 된 책을 있는 그대로의 감정을 느끼면서 ..

나의 일기 2022.02.15

2022 02 15 나의 꿈 일기

달러구트님!! 환불해주세요!! 오늘도 똑같은 기분 나쁜 꿈이다. 학교 운동장에서 축구를 하는데 못 한다고 무시와 조롱을 받고 잘 하고 싶어서 옆에서 연습하면 괜히 옆에 와서 시비 걸고... 내 무의식 속에 학교에 대한 안 좋은 생각이 많이 있나보다. 좋지 않았던 건 맞다. 그냥 다른 사람과 부딫히는게 싫었다. 서로 장점이 있는데 지들 생각대로 평가하고 기준에 안 맞으면 뒤떨어졌다고 생각하는 곳. 그냥 학교가 싫었고 지금도 싫다.나의 사람에 대한 근본적인 생각은 안 없어질 것 같다. 단지 참고 사는 거지... 상식을 벗어나는 사람들을 보면 정말 죽이고 싶은 강한 충동이 올라온다. 근데 그 상식을 벗어나는 사람들이 잘 산다는 사실이 너무 분하다. 있는 놈들이 더 하고 지들끼리 선 그어놓고 없는 계급만들고 그..

나의 일기 2022.02.15

2022 02 14 나의 일기

오늘은 갓생 도전을 해보았다. 근데 완전한 갓생은 아니고 반갓생은 됐다. 아침 일찍 일어나서 둘레길을 돌고 잠시 쉬다가 책을 읽고 일기를 쓰고 있다. 일단 아침에 일찍 일어나니까 하루가 정말 길다. 이전에도 아침 일찍 일어나기는 했는데 오늘 유달리 시간이 많이 있다는 걸 느낀 이유가 일찍 일어나서 머리 속에 남는 뭔가를 계속하니까 시간이 무의미한 느낌이 들지 않아서인 것 같다. 이번주는 하루에 1시간 운동을 생활화하는데 초점을 둬야겠다. 1시간 운동을 하면 걷기도 6000걸음이 딱 된다. Good! 아! 그리고 가끔 어떻게 블로그를 들어오나 보는데 인터넷에 검색을 하면 내 블로그가 나온다는게 신기했다. 그리고 생각보다 내 블로그의 글을 읽어주는 분들이 많이 있다. 컴퓨터분야 포스팅을 꾸준히 올려야겠다. ..

나의 일기 2022.02.14

2022 02 13 나의 일기

오늘은 책과 방송, 아빠와의 짧은 대화를 통해 아주 값진 것을 얻었다. 어제 도서관에서 빌려온 책중 《한 권으로 읽는 컴퓨터 구조와 프로그래밍》이라는 책의 초반부를 읽었다. 저자가 이 책을 쓰게된 이유와 저자가 이 책을 읽어야하는 이유에 대해 설명하는 부분에서 프로그래머는 단지 프로그래밍을 할 줄 아는게 아니라 컴퓨터를 통해 내가 해결해야할 문제를 빠르고 정확하게 해결할 수 있는 것이 진정한 프로그래머라는 문장이 프로그래머의 의미를 잘 설명해주는 것 같다. 또한 좋은 프로그래머는 높은 수준의 도구를 사용할 줄 아는 것도 좋지만 그 도구가 만들어질 때 필요한 저수준의 도구까지 이해해야한다고 말해준다. 이 책을 통해 나의 전공공부에 대한 큰 길을 보고 세세한 부분은 필요에 따라 더 깊게 파야겠다. 방송을 보..

나의 일기 2022.02.13