전체 글

문제 출저 https://www.acmicpc.net/problem/1918 1918번: 후위 표기식 첫째 줄에 중위 표기식이 주어진다. 단 이 수식의 피연산자는 알파벳 대문자로 이루어지며 수식에서 한 번씩만 등장한다. 그리고 -A+B와 같이 -가 가장 앞에 오거나 AB와 같이 *가 생략되는 등의 www.acmicpc.net 문제 풀이 중위 표기식을 후위 표기식으로 바꾸는 문제입니다. Stack을 사용하여 문제를 풀었습니다. Stack operation을 선언하여 기호들을 저장했습니다. StringBuilder sb를 선언하여 후위 표기식을 저장했습니다. 1. 알파밧이 나오면 그대로 sb에 저장합니다. 2. ( 연산자가 나오면 operation에 저장합니다. 3. ) 연산자가 나오면 operation에서..
· CS/Spring
개요 이번에는 프레임워크와 라이브러리를 각각 알아보고 어떤 차이점이 있는지 정리해보았습니다. 프레임워크 프레임워크란? 프레임워크는 소프트웨어 개발에 필요한 기본 구조와 규칙을 제공하는 도구 모음입니다. 개발자는 이 구조안에서 특정 규칙에 따라 효율적으로 애플리케이션을 개발할 수 있습니다. 프레임워크는 제어의 역전이 적용된 기술로 애플리케이션의 흐름을 제어합니다. 프레임워크는 애플리케이션 대부분의 라이프사이클을 관리하며 앱, 서버 구동, 메모리 관리, 네트워킹, 보안 등 다양한 기능을 통합적을 제공합니다. 이를 통해 개발자는 기초적인 세부 사항보다는 애플리케이션의 핵심 기능과 비즈니스 로직 구현에 더 집중할 수 있습니다. 프레임워크의 예시로는 Spring, Django, React 등이 있습니다. 프레임워..
문제 출저 https://www.acmicpc.net/problem/1935 1935번: 후위 표기식2 첫째 줄에 피연산자의 개수(1 ≤ N ≤ 26) 가 주어진다. 그리고 둘째 줄에는 후위 표기식이 주어진다. (여기서 피연산자는 A~Z의 영대문자이며, A부터 순서대로 N개의 영대문자만이 사용되며, 길이 www.acmicpc.net 문제 풀이 후위 표기식이 주어지고 알파벳의 숫자가 주어집니다. 이 정보를 통해 후위 표기식을 계산한 정답을 구해야 합니다. Stack, Map을 활용하여 문제를 풀었습니다. Map으로 알파벳별 숫자를 저장합니다. 후위 표기식에 하나씩 탐색을 합니다. 알파벳이 나올 경우 Map을 통해서 해당되는 알파벳의 double 값을 stack에 저장합니다. +, -. *, / 연산자가 나..
· CS/Spring
어노테이션이란? 어노테이션이란 클래스, 메소드, 변수 등 코드의 특정 부분에 메타 데이터를 추가하는 방법입니다. 주석처럼 사용하며 Bean 주입, 클래스 역할 정의, lombok 을 수행해 자동으로 getter나 setter를 생성하기도 합니다. 특별한 의미를 부여하거나 기능을 부여하는 등 다양한 역할을 수행합니다. 어노테이션을 사용하면 설정을 간소화할 수 있으며 코드가 어떤 역할을 하는지 명확하게 표현할 수 있습니다. 이를 통해 코드량이 감소하고 유지보수하기 쉬워지며 생산성이 증가됩니다. 메타 데이터 : 이 데이터가 어떤 데이터인지 정보를 제공하는 데이터 어노테이션의 사전적 의미는 주석이라는 뜻입니다. 사전적 의미가 주석인 것답게 코드 상에서도 주석처럼 사용하며 클래스, 메소드, 변수 위에 @어노테이션..
문제 출저 https://www.acmicpc.net/problem/5076 5076번: Web Pages Input will consist of a number of lines of HTML code, each line containing from 0 to 255 characters. The last line will contain a single # character – do not process this line. Within the text of each line will be zero or more tags. No angle bracket will www.acmicpc.net 문제 풀이 String이 #이 나올 때까지 주어집니다. String이 HTML 태그 형식에 맞는지 확인해서 옳다면 leg..
팀 정렬 (Tim Sort) 팀 정렬은 Java의 객체 배열을 정렬할 때 사용하는 알고리즘 입니다. 팀 정렬은 삽입 정렬과 병합 정렬의 강점을 결합했습니다. 삽입 정렬의 작은 데이터 세트에 대해 효율적인 면과 병합 정렬의 큰 데이터 세트에 효율적인 면을 합친 것입니다. 팀 정렬은 배열을 여러 부분으로 나눕니다. 이렇게 나누어진 부분을 run이라고 하며 각 run에서는 삽입 정렬로 정렬합니다. 정렬된 run들은 병합 정렬로 합치면서 정렬합니다. 이런 식으로 작은 부분에는 삽입 정렬을 큰 부분에서는 병합 정렬을 이용해 각 정렬들의 강점을 활용하여 정렬합니다. 시간 복잡도 평균 경우 : O(n log n) 최악 경우 : O(n log n) 평균, 최악 모두 O(n log n)으로 일정한 성능을 보입니다. 또한..
듀얼 피벗 퀵 정렬 (Dual Pivot Quick Sort) 듀얼 피벗 퀵 정렬은 Java의 Arrays.sort() 정렬 메소드에 사용되며 원시 타입(primitive type, int[], long[]) 배열을 정렬할 때 사용합니다. 퀵 정렬 보다 더 효율적이며, 두 개의 피벗을 사용하여 배열을 세 부분으로 나누어 정렬합니다. 시간 복잡도 : O(n log n) 최악의 경우 O(n^2) 듀얼 피벗 퀵소트는 원시 타입의 배열을 정렬할 때 사용합니다. 객체 타입일 때는 팀소트를 사용합니다. 원시 타입 배열 특징 원시 타입은 메모리 크기가 작아서 값 복사나 이동이 빠릅니다. 이로 인해 값의 비교가 빠릅니다. 원시 타입 배열들은 메모리에 연속적으로 저장하여 메모리에 빠르게 접근할 수 있습니다. 듀얼 피벗 ..
힙 정렬 (Heap Sort) 힙 정렬은 효율적인 비교 기반 정렬 알고리즘입니다. 힙 정렬은 최대 힙, 최소 힙이라는 자료구조를 사용합니다. 힙은 완전 이진 트리의 일종으로, 힙의 모든 부모 노드는 그 자식 노드보다 크거나 같은 값을 가지는 특성을 가집니다. 이 특성을 이용하여 배열을 힙으로 구성하여 최소값을 찾고 남은 배열을 또 힙 구조로 만들어 최소값을 찾아서 정렬을 완성합니다. 시간 복잡도 평균 : O(n log n) 최악의 경우 : O(n log n) 힙에서 자료의 추가, 삭제는 O(log n)입니다. 이를 배열을 순회하면서 일어납니다. 배열의 순회는 O(n)으로 최종적으로 시간 복잡도는 O(n log n)이 됩니다. 장점 일정한 성능 : 데이터의 분포에 상관없이 일정한 성능을 보장합니다. O(n..
병합 정렬 (Merge Sort) 병합 정렬은 분할 정복 알고리즘으로 평균적으로 효율적인 정렬 방법입니다. 병합 정렬은 배열을 더 이상 나눌 수 없을 때까지 반으로 나눕니다. 나눈 배열을 정렬하고 병합하면서 전체 배열의 정렬을 완성합니다. 시간 복잡도 : O(n log n) 반으로 나누면서 진행하기 때문에 시간 복잡도는 O(n log n)입니다. 최악의 상황에서도 O(n log n)입니다. 평균적인 속도는 퀵 정렬 > 힙 정렬 > 병합 정렬 입니다. 장점 안정적인 정렬 : 같은 값의 요소가 정렬 후에도 순서를 유지합니다. 일정한 시간 복잡도 : 모든 경우에 대해 O(n log n)입니다. 데이터에 관계없이 일정한 성능을 보장합니다. 대규모 데이터에 효율적 : 크기가 큰 데이터에서 효율적입니다. 단점 추가..
퀵 정렬 Quick Sort 퀵 정렬은 평균적으로 매우 빠른 성능을 보이는 비교 기반 정렬 알고리즘 입니다. 분할 정복 전략을 사용하여 피벗(Pivot)을 기준으로 범위를 나누어 가면서 정렬을 진행합니다. 배열의 한 요소를 기준이 되는 피벗으로 삼아 피벗을 기준으로 작은 것과 큰 것을 정렬합니다. 나누어진 두 부분에 또 피벗을 잡고 정렬을 하고 이 과정을 반복하여 정렬을 완성합니다. 시간 복잡도 : O(n log n), 최악의 경우는 O(n^2) 입니다. 퀵 정렬은 빠른 정렬 알고리즘으로 일반적인 상황일 때 속도는 다음과 같습니다. 퀵 정렬 > 힙 정렬 > 병합 정렬 이 순서는 평균적인 상황이고 데이터 특성과 구현 방식에 따라 달라질 수 있습니다. 장점 제자리 정렬(in-place sorting) : 원..
기수 정렬 Radix Sort 기수 정렬은 숫자나 문자에서 각 자릿수 별로 정렬하여 비교 없이 정렬하는 알고리즘입니다. 자릿수 별로 정렬을 하며, 낮은 자릿수부터 높은 자릿수까지 정렬하여 정렬을 완성합니다. 기수 정렬은 같은 값의 요소들의 순서가 정렬 후에도 유지되는 안정적인 정렬입니다. 시간 복잡도 : O(k(n + k)) n : 배열의 길이, k : 숫자의 최대 자릿수(기수) 장점 빠른 속도 : 데이터의 크기가 크고 자릿수가 많아질수록 효율적입니다. 안정적인 정렬 : 정렬 후에도 순서가 유지됨 단점 메모리 사용량 증가 : 정렬을 할 때, 추가 메모리가 필요하며 자릿수가 크고 배열이 클수록 메모리 사용량이 큽니다. 제한된 사용 조건 : 자릿수가 없는 것은 정렬할 수가 없습니다. (부동 소수점) 작동 원..
계수 정렬 (Counting Sort) 계수 정렬은 요소들을 직접 비교하지 않고 정렬하는 알고리즘으로 정수 정렬 알고리즘 중 하나입니다. 배열의 각각의 요소들의 수를 센 다음 조건에 맞춰 수를 배열하는 정렬하는 방식입니다. 원소들의 값이 특정 범위 내에 있을 때 효율적으로 작동할 수 있습니다. 시간 복잡도 : O(n + k) n : 배열의 크기, k : 가장 큰 수 장점 시간 복잡도가 빠를 수 있다. 특정한 상황에서는 비교 기반 정렬 방법보다 빠를 수 있습니다. 안정적인 정렬이다. 동일한 값을 가진 원소들의 상대적 순서가 유지됩니다. 단점 공간 복잡도가 높다. 추가적인 공간이 필요하기 때문이다. (카운트 배열과 정렬된 배열) 제한 조건 : 원소들이 정수여야 하며 작은 범위여야 효과적이다. 계수 정렬을 사..
너지살
너지살개발자