728x90
분류 전체보기
544

[Java] 투 포인터

배열에서 두 개의 포인터를 사용하여 원하는 결과를 얻는 방법 두 개 포인터의 배치 방법 첫 번째 요소에 둘 다 위치 (Same direction pointers) Array에서의 중복 제거, 최소 길이의 합을 찾는 문제가 대표적 Array에서의 중복 제거 문제는 Slow, Fast 포인터로 나뉘며 Slow는 unique한 요소를 가리키고 Fast는 중복 체크를 하며 이동 첫 번째 요소와 마지막 요소에 위치 (Reverse direction pointers) 팰린드롬 문자열이 대표적인 문제 다중 for문의 복잡도를 좀 더 linear하게 해결할 수 있음 import java.util.*; public class Main { public static void main(String[] args) { int[]..

[Java] 이진 탐색

정렬된 상태의 데이터에서 특정 값을 빠르게 탐색하는 방법 찾고자 하는 값과 데이터 중앙에 있는 값을 비교 찾고자 하는 값이 더 작으면 데이터 왼쪽 부분에서 이진 탐색 찾고자 하는 값이 더 크면 데이터 오른쪽 부분에서 이진 탐색 시간복잡도: O(logn) import java.util.*; public class Main { public static void main(String[] args) { int[] arr = {1, 2, 5, 10, 20, 30, 40, 50, 60}; System.out.println(binarySearch(arr, 30)); System.out.println(binarySearch2(arr, 30, 0, arr.length - 1)); //자바 메소드 System.out.pr..

[Java] 정렬(Sort)

Algorithm Time Complexity Memory stability Bubble Sort O(n) 1 O Insertion Sort O(n) 1 O Selection Sort O(n) 1 X Merge Sort O(nlogn) n O Heap Sort O(nlogn) 1 X Quick Sort O(n) logn X Radix Sort O(dn) 1 n + k Counting Sort O(n + k) n + k O Shell Sort O(n) 1 X 안정 정렬 vs 불안정 정렬 Bubble Sort 인접한 데이터를 비교하며 자리를 바꾸는 방식 시간 복잡도: O(n) import java.util.*; public class Main { public static void main(String[] a..

백엔드 스터디 계획

코딩을 공부하는 방법에대해서 파이썬 창시자인 Guido van Rossum(귀도 반 로섬)과 Mojo, Swift 등 여러 프로젝트의 공동 창립자인 Chris Lattner(크리스 래트너)는 Go build something 이라고 말한다. 무언가를 만들고 실제로 사용하면서 스스로 목표를 설정해나간다면 그 과정에서 배울 수 있고 성취감 또한 느낄 수 있다는 것이다. 그것이 해결하고 싶은 엄청난 문제일 수도 있고 비현실적일 수도 있지만 동기 부여에 강력한 원동력이 된다고 한다. 실제로 백엔드 개발자가 되겠다고 결정했을때 Java의 기본 문법과 Spring 프레임워크의 기본을 학습하고 개인 프로젝트를 진행했다. 그리고 그 과정에서 내가 필요한 부분을 추가로 학습하며 습득하고 적용함으로써 성취감을 느낄 수 ..

Temp 2023.11.01

백엔드 커리어 로드맵 - 나는 어떤 백엔드 개발자가 되고 싶을까?

백엔드 커리어 로드맵 https://roadmap.sh/backend 나는 어떤 백엔드 개발자가 되고 싶을까? 타자공헌(他者貢獻) 심리학자인 아들러는 타자공헌(他者貢獻)의 삶을 강조했다. 결론만 얘기하면 '타자공헌'이란 자신을 위해 열심히 일을 하면 결국에는 타인을 위해 하는 일이 된다는 뜻으로 해석할 수 있다. 나는 내가 필요한 기능과 서비스를 만들고 싶다는 생각을 항상 가지고 있다. 또한 언젠가 내가 필요했던 것들이 타인들에게도 도움이 될 것이라는 생각도 가지고 있다. 이처럼 자신을 위해 하는 일과 타인을 위해 하는 일은 크게 다르지 않다고 생각한다. 마찬가지로 사용자들에게 좋은 서비스를 할 수 있게하는 것은 자신에게 좋은 서비스라고 느끼게하는 것이라고 할 수 있다. 이렇듯 나는 내가 사용자가 될 수..

Temp 2023.10.23

[Baekjoon/Java] 알고리즘 수업 - 힙 정렬 2

문제 24174번: 알고리즘 수업 - 힙 정렬 2 2 5 1 4 3(heapify(A, 2, 5)) -> 2 3 1 4 5(heapify(A, 1, 5)) -> 1 3 2 4 5(A[1] A[5]) -> 5 3 2 4 1(heapify(A, 1, 4)) -> 2 3 5 4 1(A[1] A[4]) -> 4 3 5 2 1(heapify(A, 1, 3)) -> 3 4 5 2 1(A[1] A[3]) -> 5 4 3 2 1(heapify(A, www.acmicpc.net 풀이 문제에서 제시하는 다음 수도 코드를 그대로 구현하면 되는 문제이다. 단, K번 교환될때의 배열을 저장하는 부분만 추가해주어야한다. import java.util.*; import java.util.stream.Collectors; publ..

[Java] Heap (힙)

트리 기반의 자료구조 최소 힙은 부모가 항상 자식보다 작기 때문에 루트가 결국 가장 작은 값 주로 배열로 구현 부모, 자식 같의 관계만 정의할 뿐 좌우에 대한 관계는 정의하지 않음 완전 이진 트리의 형태 다익스트라 알고리즘에도 활용 삽입 업힙(Up-Heap) 연산을 수행 시간 복잡도: O(log n) 추출 다운힙(Down-Heap) 연산을 수행 시간 복잡도: O(log n) 추출 이후에 다시 힙의 특성을 유지하는 작업이 필요 PriorityQueue Java에서는 다음과 같이 PriorityQueue를 Heap으로 사용할 수 있다. PriorityQueue heap = new PriorityQueue(); PriorityQueue 의 코드 내부에서는 Object[] Array를 사용한다. 즉, 고정된 크..

[Baekjoon/Java] 요세푸스 문제

문제 1158번: 요세푸스 문제 첫째 줄에 N과 K가 빈 칸을 사이에 두고 순서대로 주어진다. (1 ≤ K ≤ N ≤ 5,000) www.acmicpc.net 풀이 위처럼 앞에서 K-1개 만큼을 맨 뒤로 보낸 뒤 맨 앞에 있는 값을 뽑아주면 된다. import java.util.LinkedList; import java.util.Scanner; import java.util.stream.Collectors; import java.util.stream.IntStream; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int N = scanner.nextInt(); int..

[Java] LinkedList

새로운 객체를 삽입하거나 삭제하기 간편 물리 메모리를 연속적으로 사용하지 않아도 되기 때문에 관리가 간편 ArrayList는 중간 인덱스의 객체를 제어하면 뒤의 객체의 인덱스가 1씩 앞으로 당겨지기때문에 빈번한 객체 삭제와 삽입이 일어나는 곳에서는 ArrayList보다 링크만 변경하면되는 LinkedList가 좋은 성능을 발휘 ArrayList는 내부 배열에 객체를 저장하여 인덱스로 관리하지만 LinkedList는 인접 참조를 링크하여 체인처럼 관리 수정 과정 탐색, 삽입, 삭제: O(n) 시작과 끝의 삽입, 삭제: O(1) ArrayList vs LinkedList 구분 순차적으로 추가/삭제 중간에 추가/삭제 검색 ArrayList 빠름 느림 빠름 LinkedList 느림 빠름 느림 메소드 정리 값 추..

Java & Spring 2023.10.20

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

프론트엔드 (Frontend) 프론트엔드는 사용자와 직접 상호작용하는 부분으로, 웹 애플리케이션 또는 웹 사이트의 시각적 부분을 담당한다. 특징 사용자 인터페이스 (UI): 프론트엔드는 웹 페이지의 레이아웃, 디자인, 색상, 텍스트, 이미지, 버튼 등 사용자가 보고 상호작용하는 모든 것을 처리한다. 웹 브라우저에서 실행: 프론트엔드 코드는 주로 HTML, CSS, JavaScript를 사용하며, 이 코드는 클라이언트 측에서 웹 브라우저에서 실행된다. 사용자 경험 개선: 프론트엔드는 웹 애플리케이션의 사용자 경험을 향상시키는 역할을 한다. 사용자가 쉽게 탐색하고 상호작용할 수 있도록 설계되어야 한다. 주요 업무 사용자 인터페이스 (UI) 개발 웹 페이지 레이아웃, 디자인 및 스타일링 작업을 수행하여 사용자..

Temp 2023.10.19
728x90