카테고리 전체보기 101

[Python 자료형] 문자열 (String) - 1

[Python 자료형] 문자열 (String) - 1 문자열 생성 방법문자열은 " 또는 '를 이용해서 만들 수 있다. " " 안에는 ' 가 들어갈 수 있고, ' ' 안에는 " 가 들어갈 수 있다. 아래 코드로 확인해 보자.1234567#-*- coding: utf-8 -*- str1 = "I'm yours"str2 = 'He said, "Python is fun!!"' print str1print str2cs 12I'm yoursHe said, "Python is fun!!"cs """ """ 또는 ''' '''을 이용해서 여러 줄의 문자열도 간단히 표현 가능하다. 123456#-*- coding: utf-8 -*-str = """Life is too short,You need python"""print..

아카이브/Python 2015.07.14

[Python 자료형] 숫자 자료형 (Number)

[Python 자료형] 숫자 자료형 (Number) 파이썬은 정수, 실수, 8진수, 16진수, 복소수등 다양한 숫자를 표현하고 사용할 수 있다. Code 예제 123456789#-*- coding: utf-8 -*-a = 100 # 정수형b = 3.14 # 실수형c = 3.14E5 # 실수형(지수 표현식)d = 0o10 # 8진수e = 0x3d # 16진수f = 1+3j # 복소수 print a, b, c, d, e, fcs 1100 3.14 31400000000.0 8 61 (1+3j)cs복소수를 제외하고는 다른 언어들과 큰 차이가 없다. 실수를 지수 표현식으로 사용한 c는 $3.14*10^5$와 같은 의미이다. 숫자 자료형 연산사칙연산(+,-,*,/)과 나눈 값의 나머지를 구하는 모듈러연산(%)은 따..

아카이브/Python 2015.07.14

[리스트] 리스트의 이해와 종류

[리스트] 리스트의 이해와 종류 리스트 자료구조 - 데이터를 나란히 저장하며 중복된 데이터의 저장이 가능한 자료구조- 스택, 큐, 덱과 같은 선형 자료구조 - 구현 방법에 따라 배열 리스트와 연결 리스트로 나뉨 리스트 자료구조의 종류- Array List : 배열을 기반으로 구현한 리스트 - Linked List : 메모리 동적 할당을 기반으로 구현한 리스트Linked List는 다른 노드를 가리키는 포인터 사용에 따라 종류가 세분화된다. 리스트 자료구조의 ADTADT는 배열 기반인지 연결 기반인지에 상관없이 리스트의 특성에 따라 정의되어야 한다. 필요에 따라 추가 되거나 삭제될 수 있다. 1234567891011121314151617181920212223242526void ListInit(List *p..

[추상 자료형] 추상 자료형(Abstract Data Type)

[추상 자료형] 추상 자료형(Abstract Data Type) 추상 자료형(Abstract Data Type)기능의 구현 부분을 나타내지 않고 순수한 기능이 무엇인지 나열한 것을 추상 자료형이라고 한다. 예를 들면, 사용 설명서와 같다. 선풍기의 사용 설명서를 본다고 가정하자. 사용 설명서에는 정지, 미풍, 약풍, 강풍, 회전, 타이머등의 기능 설명과 사용 방법이 나와있다. 하지만 버튼을 눌렀을 때 선풍기 내부회로에서 어떤 일이 발생하는지에 대해서는 전혀 나와있지 않다. 추상 자료형은 선풍기의 사용 설명서와 같이 기능과 사용 방법을 정의한 것이다. 추상 자료형의 필요성추상 자료형은 구현자와 사용자를 분리해 준다. 라이브러리를 가져다 쓰거나 내장 함수를 사용하는 것도 추상 자료형이 정의되어 있기 때문이다..

[알고리즘 사이트] 알고리즘 문제 풀이 사이트

[알고리즘 사이트] 알고리즘 문제 풀이 사이트 오일러 프로젝트(Project Euler)수학적인 문제들을 프로그래밍으로 해결하는 퀴즈 풀이 사이트 Synap에서 한글로 번역한 사이트를 제공하고 있다. 본 사이트의 모든 문제가 번역되어 있진 않지만 현재 100여개의 문제가 번역되어 있고 많은 사람들이 사용하고 있다. 자신이 원하는 언어로 문제를 풀고 답만 입력하면 된다. 입력한 답이 정답일 경우 다른 사람들이 문제를 푼 코드들을 볼 수 있다.(Project Euler @kr : http://euler.synap.co.kr/)(Project Euler @net : https://projecteuler.net/) 알고 스팟(Algospot)프로그래밍 대회에서 배우는 '알고리즘 문제해결 전략'의 저자 구종만씨가..

[재귀 알고리즘] 하노이 타워(The Tower of Hanoi) - 재귀, 스택

[재귀 알고리즘] 하노이 타워(The Tower of Hanoi) - 재귀, 스택 하노이 타워 문제하노이 타워 문제는 재귀적으로 해결할 수 있는 대표적인 문제이다. 조건 : 원반은 한번에 한 개씩 옮길 수 있고 큰 원반이 작은 원반 위에 올라가서는 안된다.원반을 A에서 C로 모두 옮기면 된다. 하노이 타워 패턴- A에 있는 n개의 원반 중 맨 아래에 있는 n번째 원반을 제외한 나머지 원반을 모두 B로 옮긴다. - A에 남은 하나의 원반을 C로 옮긴다.- B의 모든 원반을 C로 옮긴다.결론을 먼저 말해서 헷갈릴 수도 있지만 하노이 타워를 원반 2개부터 하나씩 증가시키면서 해보면 같은 패턴이 반복 되는 걸 알 수 있다.하노이 타워의 최소 단위는 2개의 원반이 있을 때인데 작은 원반을 A->B로 옮기고, 큰 ..

[재귀 알고리즘] 피보나치 수열(재귀, 꼬리 재귀, 반복문)

[재귀 알고리즘] 피보나치 수열(재귀, 꼬리 재귀, 반복문) 피보나치 수열피보나치 수열은 앞에 두 수를 더해서 현재 위치의 수를 만드는 수열이다. $$ 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55 ... $$수학적으로 표현하면,\[ Fibonacci(n) = \begin{cases} 0 & \quad \dots \text{ n = 1}\\ 1 & \quad \dots \text{ n = 2}\\ Fibonacci(n-1) + Fibonacci(n-2) \quad \dots \text{ otherwise}\\ \end{cases} \]아래는 피보나치 수열을 일반적인 재귀, 꼬리 재귀, 반복문으로 구현한 코드이다.(꼬리 재귀 설명 : http://ledgku.tistory.com/37)C..

[재귀] 재귀 vs 꼬리 재귀

[재귀] 재귀 vs 꼬리 재귀 재귀와 꼬리 재귀의 차이 함수를 호출하면 함수가 호출된 위치를 가리키는 주소 값이 저장되어야 한다. 함수가 재귀적으로 호출될 경우 함수 안에서 함수가 계속해서 호출되고 차례로 리턴된다. 그래서 호출 횟수가 많아지면 돌아갈 곳의 주소 값을 저장하고 있는 스택이 넘치거나 프로그램의 실행 속도가 느려지는 단점이 있다. 위의 문제는 함수가 호출된 위치를 기억하기 때문에 발생한다. 일반 재귀 함수의 경우 리턴되는 함수 값을 받아 연산을 하고 다시 그 값을 리턴하는 방식을 취한다. 그렇다면 함수가 호출된 위치로 돌아갔을 때 실행할 작업이 없다면 어떨까? 함수 호출 위치를 기억할 필요도 없고 스택이 넘치는 경우도 발생하지 않게 되지 않을까?꼬리 재귀로 구현하게 되면 위 문제가 해결된다...

[탐색 알고리즘] 순차 탐색 알고리즘 vs 이진 탐색 알고리즘

[탐색 알고리즘] 순차 탐색 알고리즘 vs 이진 탐색 알고리즘 알고리즘 비교알고리즘의 시간 복잡도만 비교하게 되면, 순차 탐색 알고리즘은 $O(n)$이고 이진 탐색 알고리즘은 $O(logn)$이므로 이진 탐색 알고리즘이 훨씬 좋아 보인다. 하지만 이진 탐색 알고리즘은 데이터가 정렬되어 있어야 한다는 전제 조건이 있다. 보통 정렬 알고리즘의 경우 $O(nlogn)$의 시간 복잡도를 가진다. 어떤 알고리즘이 좋다고 분명하게 말할 수는 없다. 상황에 맞춰서 적합한 알고리즘을 선택해야 한다.아래 코드는 배열의 길이가 500, 5000, 50000일 때, 각 알고리즘의 최대 연산횟수를 나타낸 것이다.(Worst Case)$O(n)$과 $O(logn)$의 차이가 어느정도인지 알 수 있을 것이다. Code123456..

[탐색 알고리즘] 이진 탐색 알고리즘(Binary Search)

[탐색 알고리즘] 이진 탐색 알고리즘(Binary Search) 이진 탐색 알고리즘 이진 탐색 알고리즘을 위해서는 데이터가 정렬되어 있어야 한다. 이진 탐색 알고리즘은 정렬된 데이터가 아니면 적용이 불가능하다. 배열 { 1, 2, 3, 7, 9, 12, 21, 23, 27 }에서 3을 찾는 경우 알고리즘 진행 방식은 아래와 같다. 첫번째 시도배열 시작 인덱스와 마지막 인덱스 값을 합하여 2로 나눈다. 그 인덱스에 해당하는 값이 3인지 확인한다. 두번째 시도arr[4]의 값 9와 찾는 값 3의 대소를 비교한다.3이 9보다 작으므로 인덱스 4~8은 탐색의 범위에서 제외한다.(정렬된 데이터여서 가능)0과 3을 더하고 2로 나눈다.(나머지는 버린다.)결과가 1이므로 arr[1]의 값 2와 찾는 값 3이 일치하는..