ALGORITHM/이론 11

java 최대공약수 구하기

두 수의 최대공약수(Greatest Common Divisor, GCD)는 두 수가 공통으로 가지고 있는 가장 큰 약수를 의미합니다. 다시 말해, 주어진 두 수 중에서 더 작은 수로도 나누어떨어지는 가장 큰 수를 말합니다. 최대공약수를 계산하는 방법은 여러 가지가 있습니다. 그 중 가장 일반적인 방법은 "유클리드 호제법"을 사용하는 것입니다. 이 방법은 두 수의 차이가 두 수 중 작은 수로 나누어떨어질 때까지 두 수를 계속 나누어주는 과정을 반복하여 최대공약수를 찾는 방법입니다. 예를 들어, 30과 45의 최대공약수를 구하는 경우: 45를 30으로 나누면 나머지가 15가 남습니다. (45 ÷ 30 = 1, 나머지 15) 이제 30을 15로 나누면 나머지가 0이 됩니다. (30 ÷ 15 = 2, 나머지 0..

ALGORITHM/이론 2023.08.26

StringBuilder란

public class StringBuilderExample { public static void main(String[] args) { StringBuilder sb = new StringBuilder(); sb.append("Hello"); sb.append(" "); sb.append("World"); System.out.println(sb.toString()); // Output: "Hello World" } } StringBuilder는 Java에서 문자열을 효율적으로 처리하기 위해 제공되는 클래스입니다. 문자열 연결 작업을 수행할 때 String 클래스를 사용하면 새로운 문자열이 생성되기 때문에 메모리 사용량이 많아질 수 있습니다. 하지만 StringBuilder를 사용하면 문자열을 수정하거나..

ALGORITHM/이론 2023.08.23

JAVA 2차원 시계방향으로 90도 돌리기

왼쪽 배열을 시계방향으로 돌리면 오른쪽과 같습니다. 색깔대로 규칙을 확인해보면 다음과 같습니다. 이제 시계방향으로 직접적으로 돌리기 위해서 배열의 좌표 위치를 활용하겠습니다. 원래 위치 -> 시계방향 90도 돌린 후 위치는 이렇게 됩니다. 돌린 후 배열의 행은 원래 배열의 열과 같고 돌린 후 배열의 열은 (원래 배열의 최대 인덱스 - 원래 배열의 행)과 같다는 것을 알 수 있습니다. 여기서는 최대 인덱스가 2입니다. [0,0] -> [0,2] [0,1] -> [1,2] [0,2] -> [2,2] 2-0 = 2 [1,0] -> [0,1] [1,1] -> [1,1] [1,2] -> [2,1] 2-1= 1 [2,0] -> [0,0] [2,1] -> [1,0] [2,2] -> [2,0] 2-2 = 0 class..

ALGORITHM/이론 2022.04.07

[Java] 2차원 배열 정렬

2차원 배열을 정렬 하기 위해서는 Comparator 클래스를 사용해서 compare 함수를 재정의 해줘야합니다. arr가 [7,6] [2,6] [2,5] 일 때, 오름차순 정렬하는 법 import java.util.Arrays; import java.util.Comparator; public class 정렬{ public static void main(String[] args) { int[][] arr = {{7,6},{2,5},{2,6}}; Arrays.sort(arr,new Comparator() { @Override public int compare(int[] o1, int[] o2) { if(o1[0] == o2[0]) return o1[1]-o2[1]; else return o1[0]-o2[0..

ALGORITHM/이론 2021.06.30

Bubble Sort. 버블정렬

서로 인접한 두 원소를 검사하여 정렬하는 알고리즘 인접한 두 수를 비교하면서 크기가 클 수록 뒤로 이동하여 결국에는 가장 큰 숫자가 맨 뒤로 이동하게 된다. 정렬된 숫자를 제외하고 계속해서 비교해주면 된다. 예시) 5 6 3 1 8 // 5 6 비교 5 6 3 1 8 // 6 3 비교 , swap 5 3 6 1 8 // 6 1 비교, swap 5 3 1 6 8 // 6 8 비교 5 3 1 6 8 // 1회전 결과 5 3 1 6 8 // 5 3 비교, swap 3 5 1 6 8 // 5 1 비교, swap 3 1 5 6 8 // 5 6 비교 3 1 5 6 8 // 2회전 결과 3 1 5 6 8 // 3 1 비교, swap 1 3 5 6 8 // 3 5 비교 1 3 5 6 8 // 3회전 결과 1 3 5 6..

ALGORITHM/이론 2021.01.05

Insertion sort. 삽입정렬

주어진 숫자에서 두번째 자료(key)부터 앞의 자료들과 비교하며 삽입하여 정렬한다. 예시 ) 빨간색 : i 파란색 : j-1 8 5 6 2 4 key 5와 그 앞 8 비교 , swap 5 8 6 2 4 key 6과 그 앞 8 비교 , swap 5 6 8 2 4 key 6과 그 앞 5 비교 5 6 8 2 4 key 2와 그 앞 8 비교, swap 5 6 2 8 4 key 2와 그 앞 6 비교, swap 5 2 6 8 4 key 2와 그 앞 5 비교, swap 2 5 6 8 4 key 4와 그 앞 8 비교, swap 2 5 6 4 8 key 4와 그 앞 6 비교, swap 2 5 4 6 8 key 4와 그 앞 5 비교, swap 2 4 5 6 8 key 4와 그 앞 2 비교 2 4 5 6 8 import j..

ALGORITHM/이론 2021.01.04

Selection sort. 선택정렬

1. 주어진 숫자 중에 최솟값을 선택한다. 2. 최솟값과 맨 앞의 위치(정렬된 것을 제외한)를 변경한다. 3. 정렬된 것은 제외하고 1, 2 를 반복한다. 예시 ) 5 1 8 2 6 에서 최솟값을 찾는다. : 1 , 맨 앞의 5와 바꾼다. // 1회전 1 5 8 2 6 에서 맨 앞의 1을 제외한 최솟값을 찾는다 : 2 , 정렬된 것을 제외한 맨 앞의 5와 바꾼다. // 2회전 1 2 8 5 6 에서 정렬된 1,2 를 제외한 최솟값을 찾는다. : 5 , 정렬된 것을 제외한 맨 앞의 8과 바꾼다. // 3회전 1 2 5 8 6 에서 정렬된 1,2,5를 제외한 최솟값을 찾는다. : 6 , 정렬된 것을 제외한 맨 앞의 8과 바꾼다. // 4회전 1 2 5 6 8 마지막 원소는 자동으로 정렬된다. import j..

ALGORITHM/이론 2021.01.04

HashMap(해시테이블)

import java.util.Collection; import java.util.HashMap; import java.util.Set; public class HashMap_test { public static void main(String[] args) { HashMap hm = new HashMap(); //키가 똑같으면 마지막께 들어간다. hm.put(1, "test1"); hm.put(3, "test2"); hm.put(2, "test2"); //해당하는 키가 있으면 true 아니면 false hm.containsKey(1); //해당하는 value가 있으면 true 아니면 false hm.containsValue("test1"); //해당하는 key의 값을 가져와라 hm.get(2); //중복..

ALGORITHM/이론 2020.11.14

ArrayList(선형리스트)

import java.util.ArrayList; import java.util.Collections; //1. ArrayList public class test { //implements는 부모의 메소드를 반드시 오버라이딩(재정의)해야 한다. static class Person implements Comparable{ int n; String name; Person(int n, String name){ this.n = n; this.name = name; } @Override public int compareTo(Person o) { if(Integer.compare(this.n, o.n) == 1) { return 1; } else if(Integer.compare(this.n, o.n) == 0) ..

ALGORITHM/이론 2020.11.09