Algorithm 13

자료구조 :) Stack과 Queue를 이해한다.

goal 자료구조 Stack과 Queue를 이해한다. 자료구조를 공부하는 이유 "극강의 효율 추구" 어떤 언어를 배우던 배열의 개념은 공부하게 되는데, 배열의 개념을 안다는 가정하에 설명을 하겠다. [1, 2, 3, 4, 5] 처럼 숫자가 저장된 배열이 있다고 생각해보자. 그리고 반복문을 이용해 처음부터 탐색을 시작하여 마지막 요소 값을 찾을 것이다. 앞선 배열의 요소의 개수는 5개이니 반복문에 의해서 배열을 총 5번을 탐색하여 마지막 요소를 찾는다. 만약 배열의 요소가 1만개가 되는 상황이면 어떨까? 반복문은 1만번을 탐색하게 될 것이다. 우리의 목적은 마지막 요소를 찾는 것이 목표인데 는 것은 참 아이러니하면서 눈살이 찌풀어지지 않는가? 이러한 예시가 비효율적인 프로그램이라고 할 수 있으며 같은 문제..

자료구조 (java) :) LinkedList 구현하기

goal LinkedList의 구현 내용을 이해한다. 데이터 삽입구현 데이터 삭제구현 데이터 불러오기 package structure; public class SinglyLinkedList { public static void main(String[] args) { LinkedList linked = new LinkedList(); linked.unshipt("데이터1"); linked.unshipt("데이터2"); linked.unshipt("데이터3"); linked.unshipt("데이터4"); linked.push("push데이터1"); linked.insert(2, "--insert 데이터1--"); linked.getLinkedList(); } } // Node 정보를 담는 클래스 class ..

자료구조 (java) :) 삽입정렬... 입력받은 값을 버블정렬로 출력하기

goal 삽입정렬의 로직 설계 및 내용을 이해한다. package algorithm; import java.util.Scanner; public class InsertionSort { public static void main(String[] args){ Scanner sc = new Scanner(System.in); String line = sc.nextLine(); String[] strArray = line.split(","); Integer[] num = new Integer[strArray.length]; // Integer instance의 참조변수 num에 입력값 저장 for (int i = 0; i < num.length; i++) { num[i] = Integer.parseInt(str..

자료구조 (java) :) 버블정렬... 입력받은 값을 버블정렬로 출력하기

package algorithm; import java.util.Scanner; public class BubbleSort { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String line = sc.nextLine(); String[] str = line.split(","); Integer[] num = new Integer[str.length]; // Integer instance의 변수 num에 입력값 저장 for(int i = 0; i < num.length; i++) { num[i] = Integer.parseInt(str[i].trim()); } // BubbleSort 알고리즘 for (int i..

자료구조 (java) :) 선택정렬.. 입력받은 값을 선택정렬로 정리하기

goal 사용자에게 입력받은 값을 선택정렬 로직을 사용하여 오름차순으로 정리한다. package algorithm; import java.util.Scanner; public class SelectionSort { public static void main(String[] args){ Scanner sc = new Scanner(System.in); String line = sc.nextLine(); String[] str = line.split(","); Integer[] num = new Integer[str.length]; // num의 instance에 입력 받은 값을 순차적으로 넣어준다. for (int i = 0; i < num.length; i++){ num[i] = Integer.parse..

자료구조 이론 :) 선택정렬, 버블정렬, 삽입정렬을 알아보자

goal 선택정렬, 버블정렬, 삽입정렬을 이해한다. 1 ] 선택정렬(Selection Sort) 선택 정렬은 해당 자리를 이미 선택하고 그 자리에 오는 값을 찾는 것이다. ※ 선택정렬은 제자리 정렬(in-place sorting) 알고리즘의 하나이다. 제자리 정렬이란, 입력 배열(정렬되지 않은 값들)이회에 다른 추가 메모리를 요구하지 않는 정렬 방법이며 해당 순서에 원소를 넣을 위치는 이미 정해져 있고, 어떤 원소를 넣을지 선택하는 알고리즘 1. 선택정렬의 과정 해당 과정은 선택정렬을 이용하여 배열을 오름차순으로 표현하는 과정을 나타낸다. 1. 선택정렬을 이용하여 배열을 오름차순으로 표현하는 과정 말로 표현하기 N번째 인덱스를 고정시킨다. ....(1) N번째 인덱스와 이후의 인덱스들과의 값을 비교한다...

algorithm(java) :) 달팽이 알고리즘 배열로 풀어보기 (2차원 배열풀이)

goal Java로 구현한 달팽이 알고리즘을 이해한다. 1 ] 달팽이 알고리즘 1. 문제설명 사용자가 입력값 n을 입력했을 때, n * n의 배열을 위와 같은 규칙으로 출력하는 문제 2. 알고리즘 순서도 및 코드풀이 알고리즘 순서도 코드풀이 package algorithm; import java.util.Scanner; public class TwoArraySpiral { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.printf("숫자를 입력하세요 : "); int size = sc.nextInt(); int[][] arr = new int[size+1][size+1]; // 2차원배열 in..

자료구조 이론 :) Stack이해하기

goal Stack을 이해한다. Stack 및 Queue 다시 정리 1] Stack 1. Stack 이해하기 Stack은 블럭 쌓기 이다. 누군가 Stack에 대해서 묻는다면 한 문장으로 stack은 블럭 쌓기라고 이야기해주고 싶다. 현실 세계의 (예)로 이해하기 현실에서 같은 모양의 4개의 블럭을 하나의 상자에 쌓는다고 가정한다. 쌓기를 시작하면 첫 번째 블럭, 두 번째 블럭, 세 번째 블럭, 네 번째 블럭으로 쌓이게 될 것이다. 반대로 이 블럭들을 빼면 가장 먼저 나오는 순서대로 네 번째 블럭, 세 번째 블럭, 두 번째 블럭, 첫 번째 블럭이 될 것이다. 이 개념 자체가 Stack이다. Stack의 자료구조 관점 자료구조 관점에서 Stack은 첫 번째 들어간 블럭이 가장 늦게 나온다는 것을 이유로 L..

[백준 2501번] N의 K번째 약수 출력하기 (시간복잡도 줄이기)

goal 자연수 n과 k를 입력 받아서 n의 k번째 약수를 출력하는 프로그램 참고자료 백준 2501번 수정, 개선이 필요할 경우 지적해주시면 감사하겠습니다. 참고할 수 있는 자료나 코드를 개선할 수 있는 부분을 알려주시면 감사하겠습니다. 1. 목표 자연수 n과 k를 입력 받아서 n의 k번째 약수를 출력하는 프로그램을 작성하세요. 단, k가 n보다 크면 0을 출력합니다. 1-1 아이디어 N = A * B 이므로 N의 제곱근으로 시간복잡도를 줄인다 약수는 list에 저장합니다. 반복문을 통해 약수list에 a, b를 저장합니다. 이때 반복문을 한 번 돌때마다 약수list에 a, b를 동시에 저장해줍니다. 만약, A == B라면 중복되어 list에 저장되기 때문에 조건으로 이를 방지합니다. 모든 처리를 한 후..

algorithm(python), 단어빈도수 세는 프로그램

goal 단어빈도수를 세어주는 코드를 이해한다 1] 기본 dictionary의 활용 3개 2] defaultdic을 이용한 방법 1개 게시글에 오류, 수정, 추가, 개선이 필요할 경우 지적해주시면 감사하겠습니다. 단어빈도수 세는 프로그래밍 (dictionary이용 3가지 방법) [1] 기본 dictionary의 활용 3개 기본적인 dictionary 이용 dictionary + try~exception 이용 dictionary.get 이용 [2] defaultdic을 이용한 방법 1개 [1] 기본 dictionary의 활용 3개 [1-1] 코드내용 document = ["apple", "apple", # 2개 "banana", "banana", "banana", "banana", # 4개 "orange"..

algorithm(python), [2문제] sns 평균 연결선과 관계에 따른 정렬

Goal sns친구 관계 연결선 평균을 구하는 알고리즘을 구현하고 이해한다. 참고자료 조엘 그루스(김한결, 한성주, 박은정 옮김), "밑바닥부터 시작하는 데이터 과학 2판", O&#39;REILLY 게시글에 오류, 수정, 추가, 개선이 필요할 경우 지적해주시면 감사하겠습니다. 1. 해결해야하는 문제 각각의 id를 가진 사람의 네트워크 구성이 그림과 같을 때 각 사람들의 평균 연결 수는 몇 개인지 구하여라 조건 각 사용자는 id와 이름의 정보를 가진다. 친구 관계가 가장 많은 순으로 정렬하라 [1번] 문제내용 각각의 id를 가진 사람의 네트워크 구성이 그림과 같을 때 각 사람들의 평균 연결 수는 몇 개인지 구하여라 조건 각 사용자는 id와 이름의 정보를 가진다. [1번-1] 아이디어 각 사용자의 연결선 길..