스프링 컨테이너와 빈
·
Study/Spring
강의 링크스프링 핵심 원리 - 기본편 강의 - 인프런스프링 빈 조회 - 기본AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class);@Test@DisplayName("모든 빈 출력하기")void findAllBean() {String[] beanDefinitionNames = ac.getBeanDefinitionNames();for (String beanDefinitionName : beanDefinitionNames){Object bean = ac.getBean(beanDefinitionName);System.out.println("name = " + beanDefinitionNa..
스택 & 후위 연산자
·
Study/Algorithm
스택 & 후위 연산자스택자료를 보관할 수 있는 선형 구조를 말한다. 단, 넣을 때 같은 입구에 밀어 넣어야하고, 꺼낼 때에도 같은 입구로 뽑아 꺼내야하는 제약이 있다. (밀어 넣다 → push, 뽑아 올리다 → pop)컴퓨터 내부에서 프로그램이 실행할 때 함수 호출이 일어나고 함수들이 리턴하면 마지막 호출된 곳으로 돌아가는 동작을 구현하는 데에도 스택을 사용한다."재귀 함수" 가 줄줄이 호출되었다가 줄줄이 리턴하는 모습호출 시: 함수가 호출되면 현재 함수의 상태가 스택에 푸시(push)된다.리턴 시: 함수가 리턴되면 스택에서 해당 함수의 상태가 팝(pop)되고, 이전에 호출된 함수로 돌아간다.1. 호출: factorial(4) [ factorial(4) ] 2. 호출: factorial(3) ..
양방향 연결리스트
·
Study/Algorithm
더미 양방향 연결리스트 구조class Node: def __init__(self, item): self.data = item self.prev = None self.next = Noneclass DoublyLinkedList: def __init__(self): self.nodeCount = 0 self.head = Node(None) self.tail = Node(None) self.head.prev = None self.head.next = self.tail self.tail.prev = self.head self.tail.next = None더미 양방향 연결리스트의..
연결 리스트 삽입과 삭제
·
Study/Algorithm
연결 리스트 삽입과 삭제삽입 코드 연결 과정newNode.next를 prev.next로 연결.prev.next를 newNode로 변경.nodeCount를 1 증가시킨다.newNode 2 → 1 → 3으로 하면 안되는 걸까?당연하게도 2를 먼저해버리면 이전에 newNode.next 변수에 prev.next를 저장할 수 없게된다.삽입 코드 구현 시 주의 사항(1) 삽입하려는 위치가 리스트의 맨 앞일 경우.→ prev 없음→ Head 조정이 필요없음(2) 삽입하려는 위치가 리스트의 맨 끝에 있을 경우.→ Tail 조정이 필요하다.→ pos == nodeCount + 1 인 경우 맨 앞에서부터 찾아갈 필요가 없음(3) 빈 리스트에 삽입하는 경우.→ (1)과 (2)의 조건을 통해 삽입이 이루어진다.def inse..
연결 리스트
·
Study/Algorithm
추상적 자료구조Data정수, 문자열, 레코드A set of operations삽입, 삭제 , 순회정렬, 탐색…Linked List는 존재하는 데이터를 화살표로 연결해서 관리하는 데이터 구조이다. 즉, 각 요소가 데이터와 요소를 참조(링크 , 화살표)하는 정보를 포함하는 노드로 구성된다. 이 때문에 동적인 A set of operations를 상대적으로 쉽게 할 수 있다는 장점이 있다.기본적 연결 리스트 자료구조 정의단일 노드class Node: def __init__(self, item): self.data = item self.next = None각 단일 노드를 연결한 연결 리스트의 자료구조class LinkedList: def __init__(self): self.nodeCount = 0 se..
알고리즘의 복잡도(Complexity of Algorithms)
·
Study/Algorithm
알고리즘의 복잡도시간 복잡도 (Time Complexity)문제의 크기와 이를 해결하는 데 걸리는 시간 사이의 관계공간 복잡도 (Space Complexity)문제의 크기와 이를 해결하는데 필요한 메모리 공간 사이의 관계평균 시간 복잡도 (Average Time Complexity)임의의 입력 패턴을 가정했을 때 소요되는 시간의 평균최악 시간 복잡도 (Worst-case Time Complexity) 가장 긴 시간을 소요하게 만드는 입력에 따라 소요되는 시간의 평균 Big-O Notation점근 표기법(입력 크기가 커질 경우, 알고리즘의 성능을 어떻게 변하는지를 표현) 중 하나다.어떤 함수의 증가 양상을 다른 함수(보통 n으로 표현, 일반적으로 함수로 입력의 크기만큼 성능을 보이는 함수를 의미한다)와의 ..
재귀함수(recursive functions)
·
Study/Algorithm
재귀함수(recursive functions)하나의 함수에서 **자신을 다시 호출**하여 작업을 수행하는 것.예시 : 자연수의 합 구하기1 부터 n까지 모든 자연수의 합을 구하시오.* 종료조건 없는 재귀함수*def sum(n) : return n + sum(n-1) 위 함수는 n에 대한 종료 조건이 정해져있지 않아 maximum recursion 런타임 에러가 발생한다. 따라서 종료 조건을 추가한다.* 종료조건을 추가한 재귀함수*def sum(n) : if(n재귀 알고리즘의 효율* 재귀와 반복 함수의 상대적 효율성 비교* Recursive versionIterative version시간복잡도O(N)O(N)상대적 효율낮다(함수 호출 비용)재귀보다 높을 수 있다.예시 2 : 피보나치 순열* 재귀를 이용..
정렬(Sort) , 탐색(Search)
·
Study/Algorithm
python 리스트의 정렬sorted() / 역순 : sorted(L2 , reversed=True)내장 함수 (built-in function)정렬된 새로운 리스트를 얻어냄sort() / 역순 : sort(reversed=True)리스트의 메서드 (method)해당 리스트를 정렬문자열로 이루어진 리스트의 경우정렬 순서는 알파벳 순서 (사전 순서)를 따른다.문자열의 길이가 길다고 더 큰 것이 아니다.문자열 길이 순서로 정렬하려면 ? → 정렬에 이용하는 키(key)를 지정한다. L = ["abcd", "xyz" , "spam"] sorted(L , key = lambda x : len(x)) # 리스트의 원소를 x로 지정 -> key값을 x의 길이로 지정 # ["abcd", "spam" ,..
선형 배열(Linear Arrays)
·
Study/Algorithm
데이터들이 일열로 쭉 늘어져있기 때문에 붙여진 이름.배열원소들을 순서대로 늘어놓은 것.동일한 타입의 원소만 함께 나열할 수 있다.예를 들어, 정수 배열은 모두 정수 타입의 원소로만 구성되어야 한다. 리스트파이썬의 리스트는 배열(Array)보다 융통성있는 구조를 제공한다.서로 다른 타입의 데이터를 원소로 채택해서 나열할 수 있다.예를 들어, 파이썬 리스트는 정수, 문자열, 객체 등 다양한 타입의 데이터를 혼합해서 포함할 수 있다.리스트 연산L = ["B", "C" , "S", "P"]L.append(”N”) → ["B", "C" , "S", "P" ,”N”] : 오른쪽 끝에 “N”을 추가.L.pop() → “N” : 가장 마지막 원소를 빼낸다. ["B", "C" , "S", "P" ]append()와 po..