java

Computer Science/Algorithm

[Algorithm] 세그먼트 트리(Segment Tree)에 대해서 알아보자

세그먼트 트리(Segment Tree)란 세그먼트 트리(Segment Tree)는 효율적으로 배열 또는 리스트와 같은 순차적인 데이터 구조에서 구간 쿼리(구간 검색 또는 구간 연산)를 수행하기 위한 자료구조입니다. 주로 구간 합, 구간 최솟값, 구간 최댓 값 등을 빠르게 계산하는데 사용됩니다. 세그먼트 트리는 트리 구조로 표현되며, 각 노드는 배열의 일부 구간에 대한 정보를 저장합니다. 일반적으로 이진 트리 형태를 가지며, 아래와 같은 구성요소를 가집니다. 루트 노드 : 배열 전체 구간에 대한 정보를 저장합니다. 각 내부 노드 : 두 자식 노드의 구간 정보를 합친 결과를 저장합니다. 이를 통해 트리를 아래로 내려가면서 구간 정보를 계산할 수 있습니다. 리프 노드 : 배열의 개별 원소를 나타냅니다. 세그먼..

Computer Science/Algorithm

[Algorithm] 에라토스테네스의 체, 소수찾기 feat. Java

소수(Prime Number) 소수란 보다 큰 자연수 중 1과 자기 자신만을 약수로 가지는 수다. 예를 들어, 5는 1×5 또는 5×1로 수를 곱한 결과를 적는 유일한 방법이 그 수 자신을 포함하기 때문에 5는 소수이다. 그러나 6은 자신보다 작은 두 숫자의 곱(2×3)이므로 소수가 아닌데, 이렇듯 1보다 큰 자연수 중 소수가 아닌 것은 합성수라고 한다. 1과 그 수 자신 이외의 자연수로는 나눌 수 없는 자연수로 정의하기도 한다. 에라토스테네스의 체 소수를 빨리 찾을 수 있는 알고리즘이다. 과정 2부터 소수를 구하고자 하는 구간의 모든 수를 나열한다. 자기 자신을 제외한 2의 배수를 모두 지운다. 자기 자신을 제외한 3의 배수를 모두 지운다. 자기 자신을 제외한 5의 배수를 모두 지운다. 자기 자신을 제..

Computer Science/Algorithm

[Algorithm] 동적 계획법(Dynamic Programming)

동적 계획법(Dynamic Programming) 동적 계획법(Dynamic Programming, DP)란 컴퓨터 프로그래밍 기법 중 하나로, 주로 최적화 문제나 중복되는 부분 문제를 효율적으로 해결하는 데 사용되는 알고리즘 설계 기법이다. 이는 큰 문제를 작은 부분 문제로 쪼개어 해결하는 분할 정복(Divide and Conquer)과 유사하지만, DP는 중복되는 부분 문제들을 한 번만 계산하고 이를 이용하여 전체 문제를 해결한다. 즉,한 번 계산한 문제는 다시 계산하지 않도록 하는 알고리즘. -> 점화식을 요구하는 이유이기도 하다. DP의 핵심 아이디어는 "작은 문제들의 해를 저장하고 재활용함으로써 전체 문제의 해를 구하는 것"이다. 이를 통해 중복 계산을 피하고 실행 시간을 크게 줄일 수 있습니다..

Computer Science/DataStructure

[DataStructure] 큐(Queue) feat. C, Java

자료구조 큐에 대해서 정리를 해보자. 큐(Queue)란 큐(Queue)는 컴퓨터 과학에서 사용되는 선형적 자료구조 중 하나이다. 큐는 데이터를 일시적으로 저장하거나 관리하는데 사용되며, 데이터를 먼저 집어넣은 것이 먼저 꺼내지는 "First-In, First-Out"(FIFO) 방식으로 동작한다. 큐는 일상생활에서 줄을 서서 기다리는 것과 유사한 개념으로 이해할 수 있다. 가장 먼저 줄을 선 사람이 가장 먼저 서비스를 받는 것과 같이, 큐에 데이터를 추가한 순서대로 데이터가 처리된다. 큐의 주요 연산 Enqueue : 큐에 데이터를 추가하는 연산이다. 새로운 데이터가 큐의 뒤쪽에 추가된다. Dequeue : 큐에서 데이터를 꺼내는 연산이다. 큐의 맨 앞의 데이터가 삭제되고 반환된다. Front 또는 Pe..

Computer Science/DataStructure

[DataStructure] Array & ArrayList & LinkedList (JAVA) 정리

Array (배열) 배열이란 같은 데이터 타입의 변수들로 이루어진 자료구조로, 자바에서 기본적으로 지원하는 자료 구조이다. 배열을 구성하는 각각의 값은 요수 혹은 원소(element)라고 부릅니다. 배열에서의 위치를 가리키는 숫자는 인덱스(Index)라고 부릅니다. 대부분의 언어에서 배열의 인데스는 0부터 시작하며, 자바에서도 0부터 시작한다. 대부분의 언어에서 배열의 인덱스는 0부터 시작하며, 자바에서도 0부터 시작한다. 참고로 파이썬의 경우 배열과 비슷한 list에서 리스트 맨 끝의 원소를 가리키는 인데스 -1도 존재하는데, Java에서는 배열의 인덱스는 0을 포함한 양의 정수만 가질 수 있다. 배열은 참조 객체이므로 배열을 가리키는 참조 변수는 스택영역에 할당되며, 이 참조 변수가 가리키고 있는 주..

BaekJoon

[백준 알고리즘] 10814번 : 나이순 정렬 (JAVA) 문제 풀이

문제 온라인 저지에 가입한 사람들의 나이와 이름이 가입한 순서대로 주어진다. 이때, 회원들을 나이가 증가하는 순으로, 나이가 같으면 먼저 가입한 사람이 앞에 오는 순서로 정렬하는 프로그램을 작성하시오. 입력 첫째 줄에 온라인 저지 회원의 수 N이 주어진다. (1 ≤ N ≤ 100,000) 둘째 줄부터 N개의 줄에는 각 회원의 나이와 이름이 공백으로 구분되어 주어진다. 나이는 1보다 크거나 같으며, 200보다 작거나 같은 정수이고, 이름은 알파벳 대소문자로 이루어져 있고, 길이가 100보다 작거나 같은 문자열이다. 입력은 가입한 순서로 주어진다. 출력 첫째 줄부터 총 N개의 줄에 걸쳐 온라인 저지 회원을 나이 순, 나이가 같으면 가입한 순으로 한 줄에 한 명씩 나이와 이름을 공백으로 구분해 출력한다. ht..

BaekJoon

[백준 알고리즘] 5597번 : 과제 안 내신 분..? (JAVA) 문제 풀이

문제 X대학 M교수님은 프로그래밍 수업을 맡고 있다. 교실엔 학생이 30명이 있는데, 학생 명부엔 각 학생별로 1번부터 30번까지 출석번호가 붙어 있다. 교수님이 내준 특별과제를 28명이 제출했는데, 그 중에서 제출 안 한 학생 2명의 출석번호를 구하는 프로그램을 작성하시오. 입력 입력은 총 28줄로 각 제출자(학생)의 출석번호 n(1 ≤ n ≤ 30)가 한 줄에 하나씩 주어진다. 출석번호에 중복은 없다. 출력 출력은 2줄이다. 1번째 줄엔 제출하지 않은 학생의 출석번호 중 가장 작은 것을 출력하고, 2번째 줄에선 그 다음 출석번호를 출력한다. https://www.acmicpc.net/problem/5597 5597번: 과제 안 내신 분..? X대학 M교수님은 프로그래밍 수업을 맡고 있다. 교실엔 학생..

BaekJoon

[백준 알고리즘] 10807번 : 갯수 세기 (JAVA) 문제 풀이

문제 총 N개의 정수가 주어졌을 때, 정수 v가 몇 개인지 구하는 프로그램을 작성하시오. 입력 첫째 줄에 정수의 개수 N(1 ≤ N ≤ 100)이 주어진다. 둘째 줄에는 정수가 공백으로 구분되어져있다. 셋째 줄에는 찾으려고 하는 정수 v가 주어진다. 입력으로 주어지는 정수와 v는 -100보다 크거나 같으며, 100보다 작거나 같다. 출력 첫째 줄에 입력으로 주어진 N개의 정수 중에 v가 몇 개인지 출력한다. https://www.acmicpc.net/problem/10807 10807번: 개수 세기 첫째 줄에 정수의 개수 N(1 ≤ N ≤ 100)이 주어진다. 둘째 줄에는 정수가 공백으로 구분되어져있다. 셋째 줄에는 찾으려고 하는 정수 v가 주어진다. 입력으로 주어지는 정수와 v는 -100보다 크거 ww..

Tenacity_Dev
'java' 태그의 글 목록