본문 바로가기
728x90

분류 전체보기259

[백준] 자바 문제 풀이 1275 : 골드1 BOJ 1275 : 커피숍2 풀이 코드 import java.util.*; import java.io.*; public class Main { static class SegmentTree { public long[] tree; SegmentTree(int n){ double height = Math.ceil(Math.log(n)/Math.log(2)) + 1; long node = Math.round(Math.pow(2, height)); tree = new long[Math.toIntExact(node)]; } long init(long[] arr, int node, int start, int end) { if(start == end) { return tree[node] = arr[start]; } e.. 2023. 9. 26.
[백준] 자바 문제 풀이 5676 : 골드1 BOJ 5676 : 음주코딩 import java.util.*; import java.io.*; public class Main { static class SegmentTree { public long[] st; SegmentTree(int n){ double height = Math.ceil(Math.log(n)/Math.log(2))+1; long node = Math.round(Math.pow(2, height)); st = new long[Math.toIntExact(node)]; } long init(long[] arr, int node, int start, int end) { if(start == end) { return st[node] = (arr[start] > 0) ? 1 : (arr[s.. 2023. 9. 26.
[Java/자바] 배열 배열이란 배열이란 동일한 타입을 가지는 여러개의 데이터를 담는 집합 자료형이다. 배열에 저장되어 있는 데이터를 배열의 원소(element)라고 하고, 원소가 배열에 저장되어 있는 위치를 배열의 인덱스(index)라고 한다. 그렇다면 자바에서는 배열은 어떻게 선언하고 어떻게 요소를 저장하고 접근하는지 알아보겠다. 배열의 선언 및 초기화 자바에서 배열을 선언할 때에는 선언할 배열이 어떠한 타입의 데이터를 가지는 집합인지를 명시해주어야 한다. 그렇기 때문에 일반 변수를 선언해주는 방식과 유사하다. 하지만 배열은 데이터들의 집합이기 때문에 이를 뜻하는 대괄호([])를 아래의 예제와 같이 데이터 타입과 함께 명시해주는 것이 자바에서 배열의 선언이다. int[] arr; //데이터타입[] 배열명 위의 예제에서 in.. 2023. 9. 24.
[알고리즘] 분할정복 (feat. Java) 분할정복 알고리즘이란 분할정복 알고리즘은 그대로 해결할 수 없는 큰 문제를 작은 문제로 분할하여 작은 문제부터 정복하여 결국에는 큰 문제를 해결하는 알고리즘이다. 대표적인 분할정복 알고리즘을 이용한 정렬 알고리즘은 퀵 정렬, 합병 정렬, 이진 탐색 등이 있다. 아래의 정렬 알고리즘 비교 표를 보면 알 수 있듯이 분할정복 알고리즘을 사용할 경우 적은 시간복잡도로 인해 실행시간이 빨라진다는 장점이 있다. 정렬 알고리즘 최대 실행 시간 최소 실행 시간 평균 실행 시간 선택 정렬 O(n^2) O(n^2) O(n^2) 삽입 정렬 O(n^2) O(n) O(n^2) 합병 정렬 O(nlogn) O(nlogn) O(nlogn) 퀵 정렬 O(n^2) O(nlogn) O(nlogn) 여기서는 정렬 알고리즘을 예로 들었지만 .. 2023. 9. 24.
[알고리즘]세그먼트 트리(feat. Java) 세그먼트 트리(Segment Tree) 세그먼트 트리는 트리 형태의 자료 구조를 사용하여 숫자가 저장된 배열이 존재할 때 해당 배열의 구간 합을 구하거나, 배열의 특정 인덱스의 값을 변경한 후에 다시 구간합을 구해야 하는 경우에 적은 시간 복잡도로 작업을 진행할 수 있도록 해주는 트리 구조이다. 즉, 세그먼트 트리에는 특정 구간 배열의 합들을 노드에 저장해 놓는 형태인 것이다. 예를 들어 배열의 크기가 10일 때 세그먼트 트리의 각 노드는 다음을 의미한다. 리프 노드는 배열의 각 인덱스의 값을 나타내고 (0번 노드는 배열[0] 값) 리프 노드 이외의 노드는 왼쪽 자식과 오른쪽 자식의 합, 즉 구간합을 나타낸다. 이렇게 트리를 구성할 경우, 특정 인덱스의 값이 바뀌어도 구간합의 변경이 O(logN)의 시간.. 2023. 9. 24.
[Java/자바] 반복문 - break, continue break문 반복문을 실행하면서 반복문이 가지는 조건 이외에 조건에서 반복을 중단하고 싶을 때는 어떻게 해야 할까? 이 때에 사용되는 문법이 break문인데 반복문이 실행되다가 이 break문을 만나게 되면 그 즉시 반복문이 종료되게 하는 문법이다. 예를 들어 사용자에게 계속해서 양수를 입력받다가 5의 배수를 입력받게 되면 반복문을 중단하고 싶다면 다음과 같이 코드를 작성할 수 있다. import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); while(n > 0) { if(n % 5 == 0) break.. 2023. 9. 23.
[Java/자바] 반복문 - while, do while while문 while은 반복문 중 하나로서 for문 다음으로 많이 사용되는 문법이다. while문의 구조는 다음과 같다. while( 조건식 ) { 실행문 } while문의 조건식이 참이면 실행문이 실행된다. 즉 조건식이 true인 동안은 while 문의 실행문이 반복하여 실행되는 것이다. 저번 글에서 배운 for문 에서 구구단 예제를 while문으로 작성한다면 다음과 같이 작성할 수 있다.(이중 for문 중 안쪽 부분만 while문으로!!) public class Main { public static class main(String[] args) { for(int i = 2; i 2023. 9. 23.
[Java] 반복문 - for 순환문이란 순환문이란 이름 그대로 계속 순환(반복)한다는 의미이다. 그렇기에 흔히 반복문이라고 말하는 순한문은 프로그래밍 언어에서 많이 쓰이는 문법 중 하나이다. 자바에서 반복문은 다음과 같이 3가지가 있다. for while do ~ while 모두 특정 조건식에 의해 참을 만족할 때 계속해서 반복문 내에 실행문을 실행시키는 문법으로 이번 시간에서는 for문에 대해서 알아보겠다. for문 for문은 반복문 중에서도 가장 많이 사용되는 문법이다. for문의 구조는 다음과 같다. for(1. 초기식 ; 2. 조건식 ; 4. 증감식) { 3. 실행문 } 초기식 : 최초에 단 한번 수행되는 식으로 조건식과 증감식에 사용될 변수를 초기화하는 부분으로 이미 선언된 변수를 사용할 경우 생략도 가능 조건식 : for.. 2023. 9. 23.
[백준] 자바 문제 풀이 1655 : 골드2 BOJ 1655 풀이 코드 import java.io.*; import java.util.*; public class Main { public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); int n = Integer.parseInt(br.readLine()); PriorityQueue maxq = new PriorityQueue((o1, o2) -> (o2 - o1)); PriorityQueue.. 2023. 9. 23.
[백준] 자바 문제 풀이 10868 : 골드1 BOJ 10868 풀이 코드 import java.io.*; import java.util.*; public class Main { static class SegmentTree{ private long[] tree; SegmentTree(int n){ double height = Math.ceil(Math.log(n)/Math.log(2))+1; long size = Math.round(Math.pow(2, height)); tree = new long[Math.toIntExact(size)]; } long init(long[] arr, int node, int start, int end) { if(start == end) return tree[node] = arr[start]; return tree[n.. 2023. 9. 23.
[백준] 자바 문제 풀이 10775 : 골드2 BOJ 10775 풀이 코드 import java.io.*; import java.util.*; public class Main { static int[] gate; static int find(int p) { if(gate[p] == p) return p; gate[p] = find(gate[p]); return gate[p]; } public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); in.. 2023. 9. 23.
[백준] 자바 문제 풀이 11505 : 골드1 BOJ 11505 풀이 코드 import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.util.StringTokenizer; public class Main { static class SegmentTree{ private long[] tree; SegmentTree(int n){ double height = Math.ceil(Math.log(n)/Math.log(2))+1; long size = Math.round(Math.pow(2, height)); tree = new long[Math.toIntExact.. 2023. 9. 23.
728x90
반응형