Study-Note ✍🏻 130

[Algorithm/JAVA] Comparator, Comparable

Comparable 인터페이스 (java.lang) 객체 간의 일반적인 정렬이 필요할 때, Comparable 인터페이스를 확장한다. 정렬할 객체에 Comparable 인터페이스를 implements 한 후, CompareTo() 메서드를 오버라이드 하여 정렬 CompareTo() - 현재 객체 파라미터로 넘어온 객체 : 양수 리턴 Comparator 인터페이스 (java.util) 객체 간의 특정한 정렬이 필요할 때, Comparator 인터페이스를 확장해서 특정 기준을 정의하는 compare() 메서드를 구현한다. 기본적인 정렬 기준과 다르게 정렬하고 싶을 때 사용 Comparator 인터..

CS/Algorithm 2021.01.31

[BOJ] 2667번: 단지번호붙이기 (Java)

[Java] 2667 - 단지번호붙이기 [문제] 과 같이 정사각형 모양의 지도가 있다. 1은 집이 있는 곳을, 0은 집이 없는 곳을 나타낸다. 철수는 이 지도를 가지고 연결된 집들의 모임인 단지를 정의하고, 단지에 번호를 붙이려 한다. 여기서 연결되었다는 것은 어떤 집이 좌우, 혹은 아래위로 다른 집이 있는 경우를 말한다. 대각선상에 집이 있는 경우는 연결된 것이 아니다. 는 을 단지별로 번호를 붙인 것이다. 지도를 입력하여 단지수를 출력하고, 각 단지에 속하는 집의 수를 오름차순으로 정렬하여 출력하는 프로그램을 작성하시오. [풀이] 대표적인 DFS, BFS로 풀 수 있는 문제이다. DFS가 더 익숙해서 DFS로 풀었다. 주어진 2차원 배열을 DFS로 탐색하면서 1일 경우 단지수가 존재함(count)을 ..

CS/Baekjoon 2020.11.24

[Algorithm] 그래프(Graph)

그래프 (Graph) * 그래프 자료구조란 노드와 노드를 연결하는 간선으로 구성된 자료구조이다. 그래프의 순회는 DFS 혹은 BFS로 이루어진다. 노드 사이에 양방향 경로를 가질 수 있으므로, 2개 이상의 경로가 가능하다. 루트 노드, 부모-자식 관계가 존재하지 않는다. 아래와 같이 방향이 존재할 수도 있고, 존재하지 않을 수도 있다. * 관련 용어 정점(vertex, node): 위치의 개념 간선(edge): 위치 간의 관계, 노드를 연결하는 선 (link, branch) 인접 정점(adjacent vertex): 간선에 의해 직접 연결된 정점 경로(path): 어느 한 정점에서 다른 정점 까지의 경로 싸이클(cycle): 단순 경로의 시작 정점과 종료 정점이 동일한 경우 단순 경로(Simple Pat..

CS/Algorithm 2020.11.15

[Algorithm/Java] Iterator, ListIterator

Java의 Iterator, ListIterator * Iterator 컬렉션 프레임워크에서 저장된 요소를 읽어오는 방법을 표준화하기 위해 사용한다. Collection 인터페이스에서는 Iterator 인터페이스를 구현한 클래스의 인스턴스를 반환하는 iterator() 메소드를 정의하여 각 요소에 접근하도록 하고 있다. Collection 인터페이스를 상속받는 List와 Set 인터페이스 또한 iterator() 메소드를 사용할 수 있습니다. (Map 제외) - List 데이터를 반복하는 방법 1. for( int i =0; i

CS/Algorithm 2020.11.14

[Algorithm/Java] LinkedList 자료구조

LinkedList 자료구조 DFS(깊이 우선 탐색) 구현 시에 LinkedList를 사용한다. 각 노드가 데이터와 포인터를 가지고 한 줄로 연결되어 있는 방식의 자료구조이다. 객체를 추가하거나 삭제하면 앞, 뒤 링크만 변경되고 나머지 링크는 변경되지 않는다. 데이터 추가나 삭제 시 인덱스가 밀리거나 당겨지는 일이 없기에 ArrayList에 비해 추가, 삭제가 용이하다. (1) 선언 방법 LinkedList list = new LinkedList(); LinkedList student = new LinkedList(); // 타입 지정 LinkedList members = new LinkedList(); // 타입 지정 (2) 값 추가하기 list.addFirst(1); // 가장 앞에 데이터 추가 li..

CS/Algorithm 2020.11.14

[Algorithm] BFS, 너비 우선 탐색

BFS, 너비 우선 탐색 * 너비 우선 탐색 임의의 루트 노드에서 시작해서 인접한 노드를 먼저 탐색하는 방법이다. 임의의 루트 노드로부터 가장 가까운 노드를 먼저 탐색하고, 멀리 있는 것을 가장 나중에 탐색한다. 어떤 노드를 탐색했는 지를 반드시 기록해야 하며, 일반적으로 큐를 사용해 선입선출을 원칙으로 탐색한다. 1) 깊이가 1인 노드, 2인 노드, 3인 노드... 를 반복하며 탐색하고, 방문한 노드는 큐에 기록한다. 2) 큐에 들어있는 노드를 하나씩 꺼내고 인접해 있는 노드를 차례로 방문한다. 3) 큐에 있는 노드가 없어질 때까지 반복한다. * 적용 예시 두 노드 사이의 최단 경로를 알고싶을 때 임의의 경로를 찾고자 할 때 * 탐색 과정 - 연습 문제 www.acmicpc.net/problem/126..

CS/Algorithm 2020.11.14

[CS] 파이썬으로 시작하는 데이터 사이언스 (5)

10 minutes to pandas (판다스 실습) 참고 : pandas.pydata.org/pandas-docs/version/1.0.0/getting_started/10min.html - numpy, pandas 사용하기 > import numpy as np > import pandas as pd numpy : 행렬이나 대규모 다차원 배열을 쉽게 처리 할 수 있도록 지원하는 파이썬 라이브러리 - Object 생성하기 (1) Series 만들기 s = pd.Series([1, 3, 5, np.nan, 6, 8]) 0 1.0 1 3.0 2 5.0 3 NaN 4 6.0 5 8.0 dtype: float64 (2) DataFrame 만들기 dates = pd.date_range('20201110', per..

CS/Data Science 2020.11.09

[CS] 파이썬으로 시작하는 데이터 사이언스 (4)

데이터 분석을 위한 파일 경로 설정하기 - %mv - %pwd - %ls - pd.read_csv - cp949 - 설정 방법 1) 새로운 노트북 생성하기 2) 공공데이터 포털로 이동하여 원하는 데이터 다운받기 3) 다운받은 데이터를 주피터 노트북의 위치로 옮기기 : %mv 4) data 폴더 내에 판다스로 csv 파일 불러오기 pd.read_csv("./data/도로교통공단_교통사고_다발지역_20201104.csv", encoding="cp949") * 도움말 : Shift + Tab

CS/Data Science 2020.11.09

[CS] 파이썬으로 시작하는 데이터 사이언스 (3)

판다스 치트시트 활용하기 - pandas - dataframe - series - sort - drop - groupby - pivot table - plot - Pandas 사용하기 수식으로 계산할 수 있고 시각화도 할 수 있는 데이터 분석도구이다. 엑셀로는 힘든 대용량의 데이터를 분석할 수 있다. import pandas as pd로 라이브러리를 불러온 후 사용한다. - Pandas 따라해보기 pandas.pydata.org/pandas-docs/version/1.0.0/getting_started/10min.html pandas.pydata.org/Pandas_Cheat_Sheet.pdf - 관련 문법 익히기 1) DataFrame : 2차원의 자료구조 2개 이상의 프레임을 가져올 때는 데이터 프레..

CS/Data Science 2020.11.08

[CS] 파이썬으로 시작하는 데이터 사이언스 (2)

데이터 분석에 필요한 파이썬 기초 문법 - import : import를 통해 파이썬의 라이브러리나 패키지를 가져올 수 있다. - boolean : True(1), False(0) - string : 앞 뒤 공백 제거하기 - address = address.strip(), 문자열 포함여부(address.startswith(""), 혹은 "" in address) - list : append(원소 추가하기), 슬라이싱(address:[:2]), 원소 포함 여부 확인하기("" in address_list) - for : enumerate를 통해 원소와 index 함께 가져오기 - for i, val in enumerate(lang): - len() : 문자열, 리스트 길이 확인하기 - split(기준 문자)..

CS/Data Science 2020.11.08