전체 글 42

[자료구조] LinkedList

LinkedList 는 자료의 순서는 정해져 있지만, 메모리상 연속성이 보장되지 않는 자료구조로 단방향, 양방향, 원형으로 구현할 수 있다. 데이터를 동적 할당할 수 있고, 데이터 추가/삭제가 용이하다는 장점이 있지만, 데이터를 검색할 때에는 Array에 비해 상대적으로 느리다는 단점이 있다. Java 내에서는 Garbage Collection(가비지 컬렉션 : 불필요한 메모리를 알아서 정리) 기능이 있어 삭제 시에 다음 Pointer를 Null로 변경해주면 LinkedList 상에서 데이터 삭제된 걸로 구현할 수 있으며, 가르키는 포인터가 삭제된 데이터는 메모리 상에서 삭제된다. LinkedList 의 시간 복잡도 접근, 검색 : O(n) 추가/삭제 : O(1) java LinkedList ( java..

Data Structure 2023.03.17

백준 26008번: 해시 해킹 문제

https://www.acmicpc.net/problem/26008 26008번: 해시 해킹 첫째 줄에 비밀번호의 길이 $N$과 문자 종류의 개수 $M$, 정수 $A$가 주어진다. ($1 \le N, M, A \le 5\,000\,000$) 둘째 줄에 재현이가 알아낸 해시값 정수 $H$가 주어진다. ($0 \le H < M$) www.acmicpc.net 풀이 접근법 : 처음 문제를 봤을 때 아래 식을 보고 N, M , A 값을 받아 for문을 돌려 입력으로 주어진 해쉬값만 비교해보려고 했었는데, 입력으로 들어오는 값이 500000인 것을 보고, mod 연산을 사용해 식을 줄일 수 있지 않을까를 생각하였다. 입력 값을 가지고 테스를 해보니 mod 연산이 분배 법칙이 되는거까지는 파악했지만.... 더 이상..

Java 2023.03.16

[자료구조] HashMap : java.util.HashMap

HashMap 자료 구조는 { key : value } 쌍으로 이루어져 있고, 많은 양의 데이터를 검색할 때 뛰어난 성능을 발휘한다. Key와 value는 원하는 클래스나 데이터로 넣을 수 있고, key는 중복될 수 없으며 value는 중복값이 가능하다. 예시로는 아래처럼 선언하면 된다. HashMap map = new HashMap(); HashMap map = new HashMap(); HashMap map = new HashMap(); HashMap map = new HashMap(); 추가, 검색할때에 시간 복잡도는 O(1) 갖는다. HashMap 생성자와 method는 아래와 같다. 생성자 / 메서드 설명 HashMap() - HashMap 객체를 생성 ex) HashMap map = new H..

Data Structure 2023.03.16

[Java] 백준 10818번: 최소, 최대

https://www.acmicpc.net/problem/10818 10818번: 최소, 최대 첫째 줄에 정수의 개수 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에는 N개의 정수를 공백으로 구분해서 주어진다. 모든 정수는 -1,000,000보다 크거나 같고, 1,000,000보다 작거나 같은 정수이다. www.acmicpc.net 접근법 : 값 하나씩 받아와 for문으로 돌려 최소, 최대 값을 구한다. import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Stack; import java.util.StringTokenizer; public clas..

Java 2023.03.15

[자료구조] Array와 Arrays class(java.util.Arrays)

1. Array Array는 많은 수의 데이터를 다룰 때 사용되는 자료 구조로 각 데이터를 인덱스로 1:1 대응하도록 구성되어 있고, 데이터가 메모리 상 연속적으로 저장되어 있다. Data 'a' 'b' 'c' Index 0 1 2 char[] arr = {'a','b','c'}; arr[0]; // 'a' arr[1]; // 'b' arr[2]; // 'c' 배열은 인덱스를 이용해 데이터에 빠르게 접근이 가능하지만, 선언할 때에 미리 최대 길이를 정해서 생성해야 한다. char[] arr = new char[3]; char[] arr = {'a','b','c'}; 배열의 시간 복잡도 Access O(1) Search O(n) Add, delete O(n) Access : 배열의 인덱스 번호를 알고 있다..

Data Structure 2023.03.15

프론트엔드와 백엔드 차이, 백엔드 개발자가 되고 싶은 이유

1 . 프론트엔드와 백엔드 차이 --------------------------------------------------------------------------------------------------------------------------------------------------- 프론트엔드와 백엔드는 웹 개발에서 중요한 두 가지 개념입니다. 각각의 역할과 차이점은 다음과 같습니다. 프론트엔드 (Front-end) 프론트엔드는 웹 페이지의 사용자 인터페이스(UI)를 담당합니다. HTML, CSS, JavaScript를 사용하여 웹 페이지를 디자인하고 구현합니다. 즉, 웹 사이트의 디자인, 레이아웃, 기능 등을 담당하는 부분입니다. 프론트엔드 개발자는 웹 페이지의 디자인 및 사용자 경험을 개..

Backend/Zero-base 2023.03.15

백준 1021번: 회전하는 큐

https://www.acmicpc.net/problem/1021 1021번: 회전하는 큐 첫째 줄에 큐의 크기 N과 뽑아내려고 하는 수의 개수 M이 주어진다. N은 50보다 작거나 같은 자연수이고, M은 N보다 작거나 같은 자연수이다. 둘째 줄에는 지민이가 뽑아내려고 하는 수의 위치가 www.acmicpc.net 풀이 접근법 : 1~N 까지 queue에서 target을 찾을 때 까지 leftshift, rightshift 하여 count를 하나씩 증가한다. deque로 구현하여 start와 end에서 데이터를 뽑아서 shift 할 수 있음 Index를 편하게 구하는 방법을 알지 못해, 0부터 peek()함수로 비교하면서 index를 구함 import java.io.BufferedReader; impor..

Java 2023.03.14

[자료구조] Queue

Queue는 FIFO(First In First Out : 먼저 들어온 데이터가 먼저 나가는 구조)를 가진 자료 구조이다. 데이터를 입력한 순서대로 데이터가 처리되므로 여러 방식으로 활용될 수 있다. 은행창구 번호표 대기 : 빠른 번호표를 가진 사람이 먼저 업무를 봅니다. 프린터 출력 : 가장 먼저 대기열에 오른 프린트가 먼저 출력됩니다. 컴퓨터 운영체제의 테스크 스케쥴링 : 가장 간단한 형태의 선입선 처리 스케쥴링 정책 시간 복잡도 : 조회, 접근 : Ο(n) , 삽입 삭제 : Ο(1) java 내에는 Queue는 Interface 클래스라 구현 시에 Linkedlist로 구현하는 게 편함(java.util.Queue) Enqueue : add(), offer() Search : get(), conta..

Data Structure 2023.03.14

백준 25556번: 포스택 문제

https://www.acmicpc.net/problem/25556 25556번: 포스택 포닉스가 순열을 청소할 수 있으면 YES, 불가능하다면 NO를 출력한다. www.acmicpc.net 입력 예시 1) 10 4 3 6 7 8 9 10 2 1 5 --> YES 입력 예시 2) 5 5 4 3 2 1 --> NO 나의 해결법 생각 : 앞에 들어온 숫자 > 뒤에 들어온 숫자일 때 cnt(=0)가 하나씩 증가하여 cnt 가 3보다 클 경우 문제에서 제시하는 순열을 청소할 수 없다고 생각함 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenize..

Java 2023.03.14

[자료구조] Stack

Stack은 LIFO(Last In First Out : 마지막에 들어온 데이터가 먼저 나가는 구조)를 가진 자료 구조이다. 데이터가 입력된 순서의 역순으로 처리되기 때문에 여러 방식으로 사용될 수 있다. 웹 브라우저 방문기록 (뒤로 가기) : 가장 나중에 열린 페이지부터 다시 보여준다. 역순 문자열 만들기 : 가장 나중에 입력된 문자부터 출력한다. 실행 취소 (undo) : 가장 나중에 실행된 것부터 실행을 취소한다. 후위 표기법 계산 수식의 괄호 검사 (연산자 우선순위 표현을 위한 괄호 검사) 시간 복잡도 : 조회, 접근 : Ο(n) , 삽입 삭제 : Ο(1) import java.util.Stack; Stack stack = new Stack(); stack.push(1); stack.push(2)..

Data Structure 2023.03.13