전체 글
-
[Java]큐(Queue)Algorithm/자료구조 for Algorithm 2020. 9. 25. 21:22
*큐(Queue) ->큐란 선입선출(FIFO : First In First Out)의 특성을 가진 자료구조이다. ->쉽게 말해 먼저 들어간 것이 먼저 나온다. 정거장에 들어오는 지하철이나, 놀이공원에 줄 서 있는 사람들을 생각하면 이해하기 쉽다. *Java의 큐 ->큐 입력 연산은 일반적으로 offer() 메서드, 출력 연산은 poll() 메서드를 이용한다(add()와 remove()도 있지만, 이 메서드들은 Exception을 발생시키는 특징이 있다). head에 있는 원소(다음으로 나올 차례인 것)를 확인하는 연산은 peek()메서드를 이용한다. ->자바의 Queue관련 API를 살펴보면 인터페이스로 구현되어 있기 때문에, 큐 인터페이스를 상속하여 구현해놓은 LinkedList클래스를 이용하여 객체를..
-
[Java]스택(Stack)Algorithm/자료구조 for Algorithm 2020. 9. 25. 21:22
*스택(Stack) ->스택이란 후입선출(LIFO : Last In First Out)의 특성을 가진 자료구조이다. ->쉽게 말해 나중에 들어간 것이 먼저 나온다. 마트의 진열대에 물건을 놓거나, 상자에 물건을 넣은 뒤 꺼내는 것을 예시로 생각해보면 이해하기 쉽다. *Java의 스택 ->자바의 Stack관련 API를 살펴보면 스택 입력 연산은 push(), 출력 연산은 pop()메서드를 이용하며, top에 있는 원소(제일 마지막에 넣은 것)를 확인하는 연산은 peek()메서드를 이용한다. 언급한 연산 이외에 스택이 비어있는지 확인하는 empty() 메서드, 스택안에 어떤 아이템이 있는지 확인하는 search()메서드가 있다. ->스택은 java.util.Vector 클래스를 상속하기 때문에 여러 다양한 ..
-
[Java]좌표 이동/탐색Algorithm/수학&기타 2020. 9. 25. 21:21
*좌표 이동/탐색 -> DFS/BFS 문제를 접하다 보면, 좌표의 성질을 갖는 대상의 원소에서 다른 원소로 이동하거나, 그 주변을 탐색해야하는 로직이 빈번하게 사용된다. *2차원 배열 좌표와 행렬 -> 2차원 배열의 인덱스별 값이 생기는 위치를 시각화하여 생각해보면 평면을 떠올릴 수 있고, 평면은 일상 생활에서 보통 좌표를 이용하여 나타낸다. -> 일반적으로 수학에서 좌표의 1사분면은, 다음과 같은 모양을 가진다. 즉, x값이 증가할수록 오른 쪽으로 이동하고, y값이 증가할수록 위 쪽으로 이동하는 구조를 가진다. 그렇지만, 일반적으로 2차원 배열을 형성하는 경우 인덱스 별 값이 생기는 위치는 논리적으로 좌표 평면 1사분면의 구조처럼 평면이 만들어지지 않는다. -> 2차원 배열을 형성하는 경우는 다음과 같..
-
시간 복잡도 측정ProgrammingLanguage/Python 2020. 9. 20. 00:47
알고리즘 문제를 푸는 경우, 시간 복잡도를 분석해야하는 경우가 많다. 기본적으로 시간 복잡도를 항상 생각하며 문제를 푸는 것을 우선으로 하고, 만일 직관적으로 자신의 코드가 어느정도 성능을 가지고 있는지 파악하고 싶다면 아래와 같은 코드를 활용해보자. import time # 시간 라이브러리 함수 start = time.time() # 시간 측정 함수 # 측정하고자 하는 code end = time.time() print("time :", end - start) # 수행 시간 출력
-
딕셔너리(dictionary) 자료형ProgrammingLanguage/Python 2020. 9. 19. 23:10
딕셔너리는 키(Key)와 값(Value)의 쌍을 데이터로 가지는 자료형이다. 이름 그대로 사전을 생각하면 이해하기 쉽다. 예를 들어 평일을 딕셔너리 자료형을 이용하여 영어 사전 처럼 저장하고 싶은 경우, 다음과 같은 코드를 작성할 수 있다. week = dict() week['월'] = 'Monday' week['화'] = 'Tuesday' week['수'] = 'Wednesday' week['목'] = 'Thursday' week['금'] = 'Friday' 다음과 같이 바로 초기화 할수도 있다. week = {'월' : 'Monday', '화' : 'Tuesday', '수' : 'Wednesday', '목' : 'Thursday', '금' : 'Friday'} 딕셔너리 자료형이 중요한 이유는, 파이썬..
-
리스트 컴프리헨션/2차원 배열 초기화ProgrammingLanguage/Python 2020. 9. 19. 22:30
파이썬은 컴프리헨션(Comprehension)을 이용하여 반복 되거나 특정 조건을 만족하는 리스트를 쉽게 만들어낼 수 있다. 이것을 리스트 컴프리헨션(List Comprehension)이라고 한다. 이 외에도 딕셔너리 컴프리헨션, 셋 컴프리헨션이 있으니 참고하도록 하자. 리스트 컴프리헨션은 특히 파이썬에서 다차원 리스트를 초기화 하는 경우 유용하게 사용되므로 익숙해지도록 하자. 예를 들어, 0부터 9까지의 수를 1차원 리스트에 담고 싶은경우 일반적으로 다음과 같은 방법을 생각할 수 있다. arr = [0] * 10 for i in range(10): arr[i] = i 하지만 컴프리헨션을 이용한다면, 다음과 같이 한 줄의 코드 만으로 1차원 리스트를 초기화 할 수 있다. arr = [i for i in ..