본문 바로가기

분류 전체보기

(276)
Programmers - N으로 표현 with JAVA (V) 문제 주어진 N이라는 숫자와 사칙연산을 가지고 number라는 숫자를 만들 떄, N이라는 숫자를 최소한으로 사용해 만들고자 한다. 이 떄, 최소한의 개수를 구하라. 로직 ( DP : i개의 N으로 만들 수 있는 수) 1. 우선적으로, 만약 N==number라면 숫자 1개로 number를 만들 수 있으므로 1을 return 한다. 2. 문제에서 주어진 N을 사용할 수 있는 횟수는 최대 8회이다. 따라서 1회부터 8회까지 만들 수 있는 리스트를 담을 dp를 선언한다. (Set을 사용하여 중복을 허용하지 않는다.) 3. 초기값으로 그냥 HashSet을 넣는다. (인덱스 0을 위함.) 4. 1개로 만들 수 있는 수는 N밖에 없으므로 그대로 넣는다. 5. 이 후 2개를 사용하여 만들 수 있는 수부터 8개를 사용하..
Programmers - 단속 카메라 with JAVA 문제 - 차량의 이동 경로가 주어진다. - 이 때, 최소한의 카메라를 설치하여 모든 차를 한번이라도 단속할 때 설치해야하는 카메라의 수의 최소값을 구하라. 예를 들어, 다음과 같은 경우가 주어진다. 차량1 : [-20, -15] -> 차량1은 -20지점에서 고속도로에 진입해 -15지점에서 고속도로를 빠져나간다. 차량2: [-14, -5] 차량3 : [-18, -13] 차량4 : [-5, -3] 이 때, -15지점과 -5지점에 카메라를 설치하면 모든 차량을 한번은 감시하면서 최소한의 카메라를 설치한 경우가 되는 것이다. 로직 우선, 첫번째 인덱스를 기준으로 차량 데이터를 정렬한다. [-20, -15], [-18, -13], [-14, -5], [-5, -3] 순서대로 1지점, 2지점, 3지점, 4지점이라고..
Programmers - 순위 with JAVA (V) 문제 격투 대회에서 각 참가자의 번호가 1~N으로 주어지고 대결 결과가 주어진다. 이 때, 순위를 정확히 알 수 있는 사람의 수를 구하라. 로직 이 문제는 shortest way의 플로이드 워셜 알고리즘 중에 정확한 순위 문제와 유사하다. 순위 문제는 종종 나오는데, 정확한 순위를 알 수 있는지 여부 문제와 정확한 순위가 무엇인지 문제, 정확한 순위를 알 수 있는 경우의 수 문제가 주어진다. 정확한 순위를 알 수 있는지 true/false : 위상 정렬을 사용하여 판단. 싸이클이 발생하는 경우(큐에서 꺼내는 값의 개수가 0인 경우), 두개 값의 순위 구별이 안되는 경우 (큐에서 꺼내는 값의 수가 두개이상인 경우) 정확한 순위가 무엇인지 : 위상정렬 활용 (위의 경우를 벗어나면 정확한 순위를 알 수 있다...
JAVA - BASIC 1. JAVA 기본 개념 JDK(Java kit) = Library + JRE(Java Runtime Environment, 자바 실행 환경) JAVA 5.0 : Generics, Annotations, Enumerations 추가 JAVA 8.0 : Lamda, Stream, Optional 추가 LTS : 8년동안 업데이트, 버그 수정 해주는 버전 특징 - 객체 지향 언어 (현실세계의 객체를 그대로 가져와 프로그램 작성) 절차 지향(절차를 따져 프로그램 작성) - 멀티 스레드 지원 - OS 플랫폼 독립성 (JVM을 통해 운영체제에 맞는 바이너리 코드(네이티브 코드)로 변경) - 가비지 컬렉터 지원 (사용 안되는 인스턴스 청소해 메모리 정리) - 강한 타입의 언어이기에 데이터 타입을 명확히하여 메모리 ..
최종 순위 문제 - 팀별 작년 순위가 주어진다. - 이번 년도에 순위가 바뀐 두 팀이 주어진다. (2, 4)일 시 만약, 팀2가 팀4보다 순위가 높았다면 이번에는 팀4가 팀2보다 순위가 높음 - 순위 변경을 확인해 이번년도 순위를 구하고 구할 수 없다면 Impossible을 출력 로직 위상정렬을 사용한다. indegree(진입차수)가 낮을수록 높은 순위를 의미. 예를들어, 작년 순위가 5, 4, 3, 2, 1 일 때, 진입차수는 0, 1, 2, 3, 4 임을 의미한다. 또한 팀별 연결 여부를 통해 누가 더 높은 순위인지 체크한다. 예를 들어, 위와 같은 경우에서는 5 - 4, 3, 2, 1 보다 크다. 4 - 3, 2, 1 보다 크다. 3 - 2, 1 보다 크다. 2 - 1 보다 크다. 1 - 이를 true로 설정..
Effective JAVA - Item1 : 생성자 대신 정적 팩토리 메서드를 고려하라. 이펙티브 자바 2장. 객체 생성과 파괴 아이템 1 : 생성자 대신 정적 팩토리 메서드를 고려하라. 결론 : "아래의 장단점을 고려해 생성자 대신 static 키워드를 사용해 메서드를 만들고 이를 활용해 인스턴스를 생성하여 사용하자. " 클라이언트가 클래스의 인스턴스를 얻는 수단 - public 생성자 -> static factory method static factory method 예시 boolean 기본 타입의 boxed class -> Boolean Boolean의 메서드 valueOf()는 static을 사용해 생성자를 통한 인스턴스 생성없이 Boolean클래스를 참조할 수 있게 한다. 기본적인 예를 들어 Boolean 클래스의 메서드를 사용하고 싶은데 Boolean a = new Boolean(..
Effective JAVA - 1. Introduction 컴포넌트 규칙 - 명료성과 단순성이 포함되어야 한다. - 컴포넌트는 사용자를 놀라게해선 안되고 예측이 가능해야 한다. - 컴포넌트는 가능한 작되, 너무 작아서는 안된다. - 코드는 복사되는게 아닌 재사용되어야 한다. - 컴포넌트 사이의 의존성은 최소로 해야한다. - 오류는 발견하자마자 가능한 빨리, 되도록이면 컴파일시 잡아야 한다. "규칙을 배운 후 언제 그 규칙을 깨도 되느냐를 익혀야 한다." "이 책은 성능보다는 프로그램을 명확하고 정확하고 견고하고 유연하고 관리하기 쉽게 작성하는데 목적을 둔다" 용어 개념 정리 타입 - 인터페이스 - 클래스 - 배열 - 기본타입 - 애너테이션(인터페이스의 일종) - 열거 타입(클래스의 일종) - 인터페이스, 클래스, 배열은 참조 타입 -> 즉, 인터페이스, 클래스의..
행성 터널 문제 행성마다 x, y, z 좌표가 주어지고 총 n개의 행성이 있다. 행성마다의 거리는 Math.min(|x0-x1|, |y0-y1|, |z0-z1|}) 이다. 이 때, 최소한의 비용을 활용하여 모든 행성을 연결해야 한다. 로직 1. 데이터에 각각 인덱스를 리스트 말미에 삽입 2. 데이터 리스트에서 x를 기준으로 오름차순 정렬 3. 정렬된 데이터 중 앞에서부터 바로 자신의 뒤에 인덱스와 |x0-x1|을 구해 거리 리스트에 {차이 절대값, 현재 행성의 인덱스, 다음 행성의 인덱스} 삽입 -> 가능한 이유 : 우선적으로 x를 기준으로 정렬하면, x좌표로 정렬됨 따라서 x0과 x1을 비교하고 x0과 x2는 비교할 필요가 없어짐 -> 왜냐하면 거리가 무조건 적으로 x0-x1이 더 작기 때문에 또한 크루스칼 알고..