본문 바로가기

전체 글

(276)
Programmers - 구명보트 with JAVA 문제의 조건은 아래와 같다 1. 구명보트에는 두명까지 탈 수 있다. 2. 두사람의 몸무게의 합이 limit보다 작아야 한다. 3. 최소한의 보트를 사용하여 모든 사람을 구조한다. 로직 1. 몸무게 배열을 정렬한다. 2. 투포인터를 활용해 보트의 태울 사람을 정한다. 왼쪽의 해당하는 무게와 오른쪽의 해당하는 무게의 합이 limit이하라면 둘 다 태우고 왼쪽, 오른쪽 인덱스 모두 변경 아니라면 무거운 쪽에 해당하는 오른쪽의 무게만 태우고 오른쪽 인덱스 변경 만약 오른쪽, 왼쪽 인덱스 값이 같아진다면 한명 태우고 종료 [50, 20, 30, 70, 30, 40] 이라는 데이터가 있고 limit이 100이라고 가정한다. 정렬하면 [20, 30, 30, 40, 50, 70, 90]이 된다. 이때 왼쪽 포인터 0,..
Programmers - 베스트 엘범 with JAVA 프로그래머스에 있는 문제 중 베스트 엘범이라는 문제에 대해서 블로그를 작성하고자 한다. 문제 1. 장르에 속한 곡들의 플레이수 합이 높을 수록 먼저 출력 2. 장르에 속한 곡들 사이 플레이수가 높을 수록 먼저 출력 3. 최대 장르당 2개 출력 4. 인덱스를 출력 5. 장르에 속한 곡이 하나면 하나만 출력 해결 1. 장르별 합, 인덱스 리스트 처리 2. 합 별로 정렬 3. 해당 장르의 인덱스들 불러와 크기별로 정렬 4. 출력 (만약 장르에 속한 음악의 수가 1이면 그대로 출력) 코드 import java.util.*; class Solution { public List solution(String[] genres, int[] plays) { List answer = new ArrayList(); HashM..
Programmers - 여행경로 with JAVA 프로그래머스 문제 중 '여행경로' 문제에 대해서 블로그를 작성해보려고 한다. 우선, 입력은 다음과 같이 티켓이 주어진다. [[ICN, JFK] , [HND, IAD], [JFK, HND]] 조건은 다음과 같다. 1. 출발지는 ICN이다. 2. 모든 티켓을 사용한다. 3. 경로가 여러개라면 알파벳 순으로 정렬해서 첫번째 티켓을 출력한다. 나머지는 길이나 부가적인 조건이다. 출력은 다음과 같다. [ICN, JFK, HND, IAD] 와 같이 경로를 출력한다. 구현 1. 출발지는 ICN이다 -> for문을 돌며 티켓의 시작이 ICN이면 DFS를 돌린다. 2. 모든 티켓을 사용한다. -> DFS를 돌며 티켓의 길이가 다 찼을때, 반환시킨다. 3. 알파벳 정렬 -> 티켓이 여러개일 경우 -> String으로 나열..
JAVA - Grammar 이 블로그는 기본 적인 자바 문법이자 자주 사용되는 문법들을 정리해보았다. // (클래스의 전역 변수) private static int resultAll1 = 0; // (무한대) int inf1 = (int)1e9; int inf2 = (int)-1e9; // (숫자 - 알파벳) int test = 65; System.out.println((char) test); // A // (형변환) int -> char int num = 6; char ch = (char)(num + '0'); // (형변환) char -> int char c1 = '1'; int new_int1 = (int)c1 - 48; // 진짜 문자 int new_int2 = Character.getNumericValue(c1); // ..
Programmers - 전력 망을 둘로 나누기 with JAVA (+) 1. 선을 하나씩 끊는다. 2. 연결된 선들로 노드들을 방문처리한다. (인접리스트로 구하되 양방향 연결처리해야 한다.) 3. 최소값을 구한다. import java.util.*; import java.lang.Math; class Solution { public int solution(int n, int[][] wires) { int final_result = (int)1e9; for(int k=0; k
Object to Network and vise versa 직렬화 - 직렬화는 기본적으로 객체를 저장하거나 전송하기 위해 객체를 바이트 스트림으로 변환하는 과정을 의미한다. - 자바에서 주로 사용된다. - 자바에서는 ObjectOutputStream 클래스를 이용해 객체를 직렬화하여 네트워크로 전송가능하다. - 직렬화된 객체를(바이트 스트림을) 다시 객체로 바꾸는 과정을 역직렬화라고 한다. 직렬화 및 역직렬화의 조건 1. 클래스는 Serializable 인터페이스를 구현해야한다. 이는 직렬화 가능한 객체임을 명시해준다. 2. 클래스의 필드들은 직렬화 가능해야 한다. 직렬화 가능한 필드란 기본 자료형과 해당 클래스도 Serializable 인터페이스를 구현한 경우를 의미한다. 또한 필드들은 public, protected 둘 중 하나여야 한다. 3. Json 데이..
DataBase - Join 이번 블로그에서는 조인에 대해서 정리해보고자 한다. 조인 - 조인이란 하나의 테이블이 아닌 두 개 이상의 테이블을 묶어서 하나의 결과물을 만드는 것을 의미한다. - MySQL은 JOIN 쿼리를 사용하고 MongoDB에서는 lookup이라는 쿼리를 사용한다. (하지만 MongoDB에서는 조인에 대한 성능이 떨어져 되도록이면 사용하면 안된다) 1. 종류 1. 내부 조인 (교집합) : 왼쪽 테이블과 오른쪽 테이블의 두 행이 모두 일치하는 행이 있는 부분만 결과 테이블에 표기 - DEFAULT - INNER 사용 - 예를 들어, TABLEA에 데이터 중 TABLEB의 데이터와 연결되는 데이터가 없을 시, 해당 TABLEA의 데이터는 반환하지 않는다. SELECT A.name, B.name FROM TABLEA ..
DataBase - Index 이번 블로그에서는 인덱스에 대해서 알아보려고 한다. 인덱스 - 데이터를 빠르게 찾을 수 있는 하나의 장치 - 인덱스는 보통 'B-트리' 자료 구조로 이루어진다. 1. B-트리 - 루트 노드, 브랜치 노드, 리프 노드로 구성 39 83 88 46 53 - 46 53 57 83 - 89 92 100 55 57 - 만약 57을 찾는다면 이동 경로는 39-83-46-53-57-57 이 된다. - 루프노드 -> 브랜치 노드 -> 리프 노드 순으로 이동한다. 2. 인덱스가 효율적인 이유 - 모든 요소에 접근할 수 있는 균형 잡힌 트리구조와 트리깊이의 대수확정성 때문에 - 대수 확장성 : 트리 깊이가 리프 노드 수에 비해 매우 느리게 성장하는 것을 의미. 3. 인덱스를 만드는 방법 MySQL - 클러스터형 인덱스와 ..