
순환 순환 (재귀) - 알고리즘이나 함수가 수행 도중에 자기 자신을 다시 호출하여 문제를 해결하는 기법 예) 팩토리얼 값 구하기, 피보나치수열, 하노이 탑 등... 순환호출을 사용하여 factorial 구하기 int factorial(int n) { if(n 무한정 호출, 프로그램이 종료되지 않음 순환(recursion)과 반복(iteration)의 차이 순환 - 순환 호출 이용, 순환적인 문제에 자연스러움, 함수 호출의 오버헤드 발생 가능성 반복 - 수행속도가 빠름, 순환적인 문제에 대해서 프로그램 작성이 어려움 모든 순환은 반복으로 바꾸어 작성이 가능합니다 But!!, 매우 불편하거나 어려운 경우가 많습니다. ㅎ 순환(recursion)의 작동 원리 순환호출의 경우 복귀 주소를 시스템 스택에 저장하고..

우리 주변을 살펴보면 많은 부분에 있어 규칙이 정해져 있고, 조직화되어 있는 것을 볼 수 있습니다. 이렇게 하는 이유는, 효율적이기 때문인데요. 예를 들면 해야할 일을 리스트로 정리한다던가, 매표소에서 줄을 서서 구매하는 것 등등 여러 가지가 있습니다. (만약 매표소에서 줄을 서지 않고 표를 구매할 수 있다면, 엉망진창이 되겠죠?) 일상에서 볼수 있는 예와 자료구조를 비교해보면 아래와 같이 나타 낼 수 있습니다. 우리가 만들게 되는 프로그램은 적절한 자료구조와 알고리즘으로 이뤄집니다. 그래서 많은 회사들이 자료구조와 알고리즘을 중요하게 생각하는 것이죠! 만약 최대값을 찾는 프로그램을 작성한다고 가정해봅시다. 최댓값을 찾는 프로그램의 경우 다양한 방법이 있겠지만, 배열이라는 자료구조와 순차탐색이라는 알고리..
알고리즘에는 시간복잡도라는 것이 있는데요. 코드를 다 작성하고 나서, 점근적 표기법인 빅오 표기법(Big-O notation)을 사용하여 대략적인 수식으로 시간복잡도를 나타낼 수 있습니다. 하지만, 만약 실제로 자신이 작성한 알고리즘이 얼마만큼의 시간이 걸리나 측정해보고 싶다면 어떻게 해야 할까요?? 방법은 정말 간단합니다. 여러 언어들이 시간 관련 프레임워크나 모듈을 제공 할텐데, 저는 파이썬 기준으로 설명드리겠습니다. 파이썬에는 time 모듈이 있는데요. 이 모듈의 time 메서드를 사용하시면 됩니다 ㅎㅎ (쉽죠??) 오늘 시간 측정을 해보기 위해 사용할 녀석은 정렬입니다. 정렬을 하는 방법에는 정말 다양한 방법이 존재 하는데요. 그래서 어떻게 알고리즘을 작성하느냐에 따라서 시간복잡도도 달라지게 됩니..
오늘은 딕셔너리에 대한 메소드를 정리해보려 합니다. 리스트, 튜플 딕셔너리로 변환 # 리스트 및 튜플 딕셔너리 변환 # 리스트 -> 딕셔너리 name_and_sex = [['LEE', 'M'], ['KIM', 'M'], ['RYU', 'F'], ['JEONG', 'F']] print(dict(name_and_sex)) #결과: {'LEE': 'M', 'KIM': 'M', 'RYU': 'F', 'JEONG': 'F'} # 튜플 -> 딕셔너리 name_and_sex = (('LEE', 'M'), ('KIM', 'M'), ('RYU', 'F'), ('JEONG', 'F')) print(dict(name_and_sex)) #결과: {'LEE': 'M', 'KIM': 'M', 'RYU': 'F', 'JEONG':..

안녕하세요! 오늘은 문자열과 관련된 함수를 정리해 보려 합니다. 파이썬에서 문자열은 리스트와 마찬가지로 인덱싱 및 슬라이싱이 가능합니다. (파이썬은 다른 언어에 비해 문자열 처리가 상당히 편리한거 같아요.) # 인덱싱 & 슬라이싱 a = "Hello World!!" print(a[0], a[-1], a[7:11]) # 결과: H ! orld ● join() -문자열 삽입 # 문자열 삽입(join) join_str = ",".join('abcdef') print(join_str) # 결과: a,b,c,d,e,f ● strip() - 공백 지우기 # 왼쪽 공백 지우기(lstrip) test = " Hello World!! " print(test.lstrip()) # Hello World!! # 오른쪽 공백 ..

보통 코딩 테스트를 볼 때, 조금 난이도가 있는 문제는 알고리즘의 정확성 테스트뿐만이 아니라 효율성 테스트를 함께 검토하게 됩니다. 즉 알고리즘을 잘 구현해서 정답을 잘 맞춰도 효율이 좋지 못하면.. 효율성 테스트를 통과하지 못하게 되는데요. 이럴 경우, 정확성 부분에만 부분점수를 받을수도, 아예 점수를 받지 못할 수도 있습니다. 이 효율성테스트라는 것이 시간 복잡도를 의미합니다. 결국 이 알고리즘이 얼마나 문제를 빨리 풀어낼 수 있는지 체크하는 것이라 할 수 있습니다. 저 같은경우, 딱 문제를 보고 직관적으로 생각나는 방법으로 풀면 무조건 시간 복잡도가 O(n^2)이 나오더라구여 ㅜㅜㅜ 보통 효율성 테스트를 통과하기 위해서는 시간복잡도가 O(nlogn)이 되어야 하는 것 같습니다. 알고리즘을 처음 공부..

오랜만에 글 작성 하는것 같네요 ㅎㅎ.. 사실 머신러닝도 그렇고, iOS도 그렇고 욕심은 많아서 포스팅 하고 싶은 글들이 많은데.. 어쩌다보니 계속 미루게 되었네요. 다시 열심히 작성해 봐야겠습니다! 알고리즘 카테고리의 첫 포스팅인데, 앞으로 이 알고리즘 카테고리에 제가 푼 알고리즘 문제들을 올릴 것 같습니다. (알고리즘 실력이 너무 형편없어서 그냥 기록용으로 올릴 것 같습니다 ㅎㅎ..) 오늘은 알고리즘이 무엇인지와 순서도, 그리고 알고리즘 공부하기 좋은 사이트를 소개해드리려 합니다. 알고리즘 - 특정 문제를 해결하기 위해 논리적으로 기술해 놓은 일련의 명령문 프로그램 - 알고리즘을 컴퓨터가 이해하고 실행할 수 있는 특정 프로그래밍 언어로 표현한 것 순서도 - 미리 정의된 기호와 그것들을 서로 연결하는 ..