전체 글(48)
-
[자료구조] 연결 리스트(Linked List) 개념 이해하기
연결 리스트(Linked List)란? 각 노드가 데이터와 포인터를 가지고 한 줄로 연결되어 있는 방식으로 데이터를 저장하는 데이터 구조이다. 여기서 노드(node)란 데이터 연결될 다음 데이터데 대한 주소를 저장하기 위한 의 단위구조를 말한다. 데이터의 값을 저장하는 데이터 필드(Data Field)와 다음 노드의 주소를 저장하는 링크 필드(Link Field)를 가진다. 따라서 순차 자료구조 방식과 다르게 데이터의 물리적 순서와 논리적 순서가 일치할 필요가 없다. #노드 구조 이미지 추가 . 선형 리스트와는 달리 노드의 중간지점에서도 자료의 삽입, 삭제 연산이 O(1)의 시간에 가능하다. 중간에 데이터를 삭제해도 노드의 링크 필드가 가지는 주소 값을 바꿔주면 다음 데이터와 연결할 수 있기 때문이다. ..
2022.02.07 -
[자료구조] 선형 리스트(Linear List) 개념 이해하기
선형 리스트(Linear List)란? 선형 리스트란 순서를 가지고 일렬로 나열한 데이터의 모임이다. 가장 간단한 형태의 자료구조이다. 표현하고자하는 논리적인 순서와 실제 메모리상에 저장되는 물리적인 순서가 동일하다. 집합과 비슷하지만 데이터가 순서를 가지고 있다는 게 다르고 배열과 비슷하지만 인덱스 값이 식별자가 아니라는 것이 다르다. 배열은 인덱스 값을 식별자로 가지기 때문에 원소를 삭제했을 때 삭제된 데이터의 자리를 비워두는데 이런 구조가 메모리의 낭비를 유발한다. 반면에 리스트는 인덱스 값을 식별자로 가지기 않기 때문에 원소가 삭제되면 뒤 원소로 빈틈없이 채워넣는다. 그 결과 리스트는 배열에 비해 메모리의 낭비가 적다. 배열과 같이 랜덤 엑세스가 가능하므로 특정 위치의 데이터에 접근하는 시간복잡도..
2022.02.07 -
[자료구조] 자료의 표현
컴퓨터에서의 데이터 표현 컴퓨터에서는 데이터를 0과 1로 이루어진 이진수 코드로 다룬다. 우리가 보고 듣는 그림, 동영상, 음악 등의 다양한 데이터가 0과 1로 이루어진 셈이다. 0 또는 1로 이루어진 한자리를 데이터를 이루는 최소 단위인 비트(bit)라고 한다. 이 비트가 4개를 모은 그룹을 니블(nibble), 8개를 모은 그룹을 바이트(Byte)라고한다. 비트는 한개당 0과 1의 2개의 상태를 표현할 수 있고 니블은 2*2*2*2* = 2^4개의 상태를 바이트는 2*2*2*2*2*2*2*2 = 2^8개의 상태를 표현할 수 있다. 즉 n개의 비트로는 2^n개의 상태를 표현할 수 있다는 것이다. 2진수의 정수 표현 2진수는 일정한 길이의 n비트를 이용해 가장 첫 번째 비트인 최상위 비트를 이용해 음수인..
2022.02.04 -
[자료구조] 서론: 자료구조란 무엇인가?
자료구조(資料構造)란 무엇일까 자료구조를 영어로 하면 Data Structure이다. 자료=데이터들의 구조라는 느낌인데... 위키피디아에서는 컴퓨터 분야에서의 자료구조를 데이터 값의 모임, 또 데이터 간의 관계, 그리고 데이터에 적용할 수 있는 함수나 명령이라고 정의한다(https://ko.wikipedia.org/wiki/%EC%9E%90%EB%A3%8C_%EA%B5%AC%EC%A1%B0) 나는 자료구조란 데이터를 효율적으로 표현하고 저장하기 위한 데이터들의 논리적인 구조와 처리 방법이라고 배웠다. 책으로 비유하자면 자료구조란 책들을 어떻게 분류하여 정리할 것인지이고 알고리즘은 이 책 중 한권을 찾기위해 분류해놓은 책들 중 어느지점에서부터 책을 찾을지 특정 지점에서 책을 찾지 못했을 때 바로 옆에 있는..
2022.02.04 -
[백준] JAVA 2588: 곱셈
https://www.acmicpc.net/problem/2588 Solution: import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int a, b, c; a = sc.nextInt(); b = sc.nextInt(); int one, two, three; one = b/100; two = b/10%10; three = b%10; System.out.println(a*three); System.out.println(a*two); System.out.println(a*one); System.out.println(a*b); } }
2022.02.04 -
[백준] JAVA 10430: 나머지
https://www.acmicpc.net/problem/10430 Solution: import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int A, B, C; A = sc.nextInt(); B = sc.nextInt(); C = sc.nextInt(); System.out.println((A+B)%C); System.out.println(((A%C) + (B%C))%C); System.out.println((A*B)%C); System.out.println(((A%C)*(B%C))%C); } }
2022.02.04