분류 전체보기
-
-
최단경로알고리즘Algorithm/theory 2024. 10. 13. 23:15
최단 경로 알고리즘 - 가장 짧은 경로를 찾는 알고리즘이다. '길 찾기' 문제라고도 불린다. - 대표적으로는1. '한 지점에서 다른 특정 지점까지 최단 경로를 구해야 하는' 다익스트라 알고리즘2. '모든 지점에서 다른 모든 지점까지 최단 경로를 모두 구해야 하는' 플로이드 워셜 알고리즘이 있다. - 보통 '그래프' 를 이용해 표현된다.1. 각 지점은 '노드'로 , 연결된 도로는 '간선'으로 표현된다 다익스트라 알고리즘- 특정 노드에서 다른 특정 노드로 가는 각각의 최단 경로를 구해주는 알고리즘- 음의 간선(0보다 작은 값을 가지는 간선) 이 없을 때 사용- 현실 세계의 gps 알고리즘으로 채택된다 -> 현실세계에서는 음의 간선이 없으므로 가능- 매 단계 가장 비용이 적은 노드를 선택해서 과정을 반복하므로..
-
안전지대Algorithm/programers 2024. 8. 18. 21:58
문제 설명다음 그림과 같이 지뢰가 있는 지역과 지뢰에 인접한 위, 아래, 좌, 우 대각선 칸을 모두 위험지역으로 분류합니다.지뢰는 2차원 배열 board에 1로 표시되어 있고 board에는 지뢰가 매설 된 지역 1과, 지뢰가 없는 지역 0만 존재합니다.지뢰가 매설된 지역의 지도 board가 매개변수로 주어질 때, 안전한 지역의 칸 수를 return하도록 solution 함수를 완성해주세요.제한사항board는 n * n 배열입니다.1 ≤ n ≤ 100지뢰는 1로 표시되어 있습니다.board에는 지뢰가 있는 지역 1과 지뢰가 없는 지역 0만 존재합니다.입출력 예board result[[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 1, 0, 0], [0..
-
인덱스카테고리 없음 2024. 8. 11. 00:37
인덱스를 왜 쓸까?특정 조건에서 빠르게 원하는 값(튜플)을 찾기 위해 인덱스를 만드는 방법- 기존 테이블이 있는 경우 - 테이블을 생성하며 만드는 경우 unique index vs index multiindex vs index 인덱스 생성시 여러개의 컬럼을 함께 지정한 멀티 인덱스는 속성의 순서가 중요하다.첫번째 속성 기준으로 정렬을 먼저 한뒤, 두번째, 세번째 순차적으로 정렬을 하여 인덱스 테이블을 만들기 때문인덱스는 바이너리 서치를 통해 탐색을 하므로 정렬이 필수이다. 멀티 인덱스에서 두번째 값만 조건문에 있다면?멀티 인덱스를 사용하는 것이 오히려 성능이 떨어질 수 있다. 이때는 새로운 인덱스를 생성해야 한다. 결론~사용되는 쿼리에 맞춰서 적절하게 인덱스를 사용해줘야 성능 향상의 효과를 볼 수 있다 ..
-
타입 이레이저카테고리 없음 2024. 7. 30. 20:16
제네릭과 타입 이레이저 다음은 제네릭의 특징 중 하나이다.제네릭은 비구체화(non-reify) 타입이다. 비구체화란, 런타임에는 소거(erasure)가 되기 때문에 컴파일 타임보다 정보를 적게 가지는 것을 의미한다. 여기에서, erasure의 개념이 나온다.타입 이레이저는 자바 컴파일러(JVM)가 컴파일 단계에서 제네릭 코드에서 타입정보를 제거하는 과정이다.이는 자바 런타임 환경에서 호환성을 유지하고, 코드의 일관성을 보장하기 위해 사용한다. 또한, 제네릭이 사용되기 이전 버전(Java 5 이전) 과 호환이 가능하도록 한다. 자바 컴파일 단계의 erasure1. unbounded type(, )은 Object 형으로 바꾼다.public class GenericBox { private T value;..
-
jdk 버전별 ArrayList 구현 방식카테고리 없음 2024. 7. 28. 20:33
자바 ArrayList는 ensureCapacity 메소드를 통해 리스트 객체의 길이를 가변적으로 관리한다.JDK 6,7,8 버전별로 자바가 어떻게 동적 리스트의 길이를 관리하는지 알아보자 JDK6jdk6은 add,addAll 메소드에서 ensureCapacity 메소드를 호출하여 길이를 조절한다.ArrayList의 원소 추가Add/** * Appends the specified element to the end of this list. * * @param e element to be appended to this list * @return true (as specified by {@link Collection#add}) */ public boolean add(E..
-
0726TIL 2024. 7. 27. 21:46
빅오 표기법정확한 표현을 하기 위한 것이 아니라 대략적인 추세를 보기 위한 것추세를 보기 위한 것이므로 상수는 추세에 영향을 제네릭와일드카드와일드 카드는 제네릭 타입이나 제네릭 메서드를 선언하는 것이 아니다. 와일드 카드는 이미 만들어진 제네릭 타입을 활용할 때 사용하는 것이다. 와일드 카드의 ?는 무엇이든 다 상속받을 수 있다는 의미. 상한선이 없다는 의미=> 를 의미한다. 제네릭 vs 와일드 카드 와일드카드의 한계와일드 카드는 일반 메소드다. 즉, 매개변수로 들어오는 값만 제한없이 받는 것이지. return 타입은 결정 동적으로 결정할 수 없다. 이 경우 반환된 타입을 캐스팅 해야하는 상황이 발생할 수 있다. 제네릭의 경우는 반환타입, 매개변수 타입, 인스턴스 변수 타입 등을 동적으로 선언할 수 있..
-
0725TIL 2024. 7. 26. 00:55
불변객체불변객체란? 한번 값이 정해지면 바꿀 수 없는 객체 왜 쓸까?자바의 참조 자료형은 기본적으로 공유자원이다. 이 말은 같은 객체를 여러 변수가 참조 할 수 있다는 것. 이는 개발자가 의도하지 않은 사이드 이팩트를 만들어 내기도 한다. 해결을 위해서는 변수에 값을 복사하지 말고, 새로운 객체를 계속 생성하는 방법이 있다. 불변객체 선언 방법final 키워드를 사용한다. 객체 내부 인스턴스 변수를 final 키워드로 선언하면, 상수가 되어 초기화 시 한번만 값이 변경 가능하고 그 이후에는 불가능하다. 즉, setter가 필요 없는 것이다.(어차피 못 바꾸므로..) 개발자가 불변객체에 setter를 이용하여 값 변경을 시도 할 때 인텔리제이와 같은 IDE 툴에서는 에러를 일으키고 이것을 보고 불변 객체임..