목록Java (22)
영호
개요 stream을 공부하면서 Array를 stream으로 만드는 방법이 2가지가 있는 것을 알았고, 2가지 방법의 차이점에 대해 궁금증이 생겨 알아본 내용입니다. Collection이 아닌 Array를 stream으로 만들 때 2가지 방법이 있습니다. Arrays.stream() Stream.of() 위 2가지 방법은 parameter로 primitive타입의 배열을 넘기느냐, non-promitive타입의 배열을 넘기느냐에 따라 반환 값이 달라집니다. Stream.of() primitive타입 배열로 Stream.of() 호출했을 때 실행되는 코드 public static Stream of(T t) { return StreamSupport.stream(new Streams.StreamBuilderIm..
문제 링크 https://www.acmicpc.net/problem/14501 나의 풀이 주의점 n + 1일에 퇴사를 하기 때문에 상담이 n+1 일에 끝나는 경우까지 고려해야 합니다. 처음 접근 1일부터 n일까지 해당 날짜의 상담을 진행하는 경우 안하는 경우를 고려해서 점화식을 세우려고 시도해봤습니다. 만약, 1일차 상담에 이틀이 필요할 때 3일차 상담을 진행하는 경우의 점화식을 어떻게 세울지 고민하다 결국 해결하지 못하고 구글링을 했습니다. 구글링 결과 1일 부터 시작하는 것이 마지막 n일부터 시작해서 dp테이블을 갱신합니다. n=7 7일차 상담은 이틀이 필요하기 때문에 7 + 2 > n+1 이므로, 상담을 진행할 수 없습니다. 2일차 상담의 경우 5일이 필요하기 때문에 max(20 + dp[5], d..
문제 링크 https://www.acmicpc.net/problem/5427 나의 풀이 기본적으로 최소시간을 구하는 문제라 BFS를 사용했습니다. 그리고 문제를 '불이 옮겨진 칸 또는 이제 불이 붙으려는 칸으로 이동할 수 없다' 라는 문장이 있습니다. 즉, 불이 먼저 동서남북으로 한 칸씩 번지게 한 다음에 상근이가 동서남북으로 움직일 수 있는지 구별해야 합니다. 구현 기능 불은 동서남북으로 한 칸씩 번져야 한다. 단, 벽에는 불이 붙을 수 없다. 상근이도 동서남북으로 한 칸씩 움직일 수 없다. 역시 벽으로는 이동할 수 없고, 불이 붙으려는 칸으로 이동할 수 없다. -> 불을 먼저 번지게 함으로써 구별 상근이가 x,y 좌표 중 하나라도 map의 가장자리에 도착하게 되면 탈출가능한 경우이다. 막혔던 점 sB..
문제 링크 https://www.acmicpc.net/problem/1941 나의 풀이 잘못된 접근 잘못 세운 점화식 $$ dp[i] = dp[i - (가장 큰 제곱근 ^ 2)] + 1$$ 단순하게 가장 큰 제곱근의 제곱을 빼서 dp 테이블을 갱신하는 것이 최솟값이라고 생각을 했습니다. 예를 들어 i = 26의 경우 가장 큰 제곱근인 5의 제곱 25를 26에서 뺀 뒤 나온 1. 즉, dp[26-25] + 1 이 무조건 최솟값이라고 생각했습니다. $$ 26 = 1^2 + 5^2$$ 올바른 접근 점화식의 경우 위에서 세운 점화식이 아예 틀린 것은 아니지만 가장 큰 제곱근만 생각하는 것이 아닌 1 ~ 가장 큰 제곱근의 경우를 모두 생각해야 합니다. 12를 시도해보면 좋을 거 같습니다. $$ dp[i] = m..
instance method란 class의 instance를 생성하고, 해당 instance를 통해 호출할 수 있는 method입니다. static method란 컴파일 시점에 메모리에 올라갑니다. instance 생성없이 클래스를 통해 호출할 수 있는 method입니다. instance변수를 사용할 수 없습니다. instance변수란 말 그대로 동적으로 생성된 instance의 변수이기 때문에 컴파일 시점에 존재하지 않습니다. static method주의점 GC(Garbage Collector)가 메모리를 해제하지 않기 때문에, 너무 많이 사용하면 메모리 측면에서 문제가 생길 수 있습니다.
HashMap이란 Java의 collections 중 Map인터페이스를 구현한 클래스 중 하나입니다. 파이썬의 딕셔너리처럼 "Key : Value"형태로 이루어져 있습니다. 이미 존재하는 Key에 새로운 값을 넣을 경우 기존 값은 새로운 값으로 대체됩니다. Key는 중복될 수 없습니다. Map hashMap = new HashMap(); hashMap.put("test", 1); hashMap.put("test", 2); System.out.println("hashMap = " + hashMap); // hashMap = {test=2} 멀티 스레드 환경에서는 ConcurrentHashMap을 사용해야 합니다. 해시 함수를 이용해 값을 저장하고 찾기 때문에 데이터 검색에서 속도가 빠른 장점이 있습니다. ..
Java에서의 LinkedList List인터페이스를 구현한 collection클래스 중 하나로, Java에서는 doubly LinkedList를 제공해줍니다. ArrayList와 마찬가지로 List인터페이스를 구현했기 때문에 주요 메서드는 거의 비슷합니다. 각 노드들은 참조를 통해 연결되기 때문에 ArrayList보다 데이터 추가/삭제 측면에서 효율적인 수행이 가능합니다. 그러나, 특정 index의 원소에 접근하기 위해선 첫 노드부터 거쳐가야 하기 때문에 특정 원소 탐색에는 ArrayList보다 불리합니다. ArrayList에 대한 글 LinkedList원소 추가 add(element), push(element), addLast(element) : LinkedList뒤에 원소 추가 addFirst(e..

ArrayList란 Java collection의 List인터페이스 구현체입니다. ArrayList는 배열을 이용하지만, 기존 배열은 용량이 다 차면 용량이 더 큰 배열을 만들어 기존 배열 요소들을 복사하는 작업이 필요했기 때문에, 이러한 단점을 극복하고 동적으로 용량이 늘어나는 Java Collection 클래스 중 하나입니다. List인터페이스의 특징 배열 원소들의 순서가 유지되기 때문에, 인덱스를 통한 접근이 가능합니다. 중복 데이터가 허용됩니다. ArrayList선언 ArrayList arrList = new ArrayList(); // Integer타입의 ArrayList ArrayList arrList1 = new ArrayList(20); // 초기용량 20 ArrayList arrList2..