전체 글
  • 문제 N X M 크기의 금광이 있다. 금광은 1 X 1 크기의 칸으로 나누어져있으며, 각 칸은 특정한 크기의 금이 들어 있다. 채굴자는 첫번째 열부터 출발하여 금을 캐기 시작한다. 맨 처음에 첫번째 열의 어느 행에서든 출발이 가능하고, 이후에 m번에 걸쳐서 매번 오른쪽 위, 오른쪽, 오른쪽 아래 3가지 중 하나의 위치로 이동해야 한다. 결과적으로 채굴자가 얻을 수 있는 금의 최대 크기를 출력하라. (예시) 1 3 3 2 2 1 4 1 0 6 4 7 가장 왼쪽의 위치가 (1, 1)이고 가장 마지막의 위치를 (n, m)이라고 했을때 아래와 같다. (2, 1) (3, 2) (3, 3) (3, 4) 위치로 이동하면 총 19만큼 금의 최댓값으로 이동할 수 있다. 첫번째 열에서 (1,1) (2,1) (3,1) 의 ..

    Read more
  • 시퀀스의 개념 데이터의 '순서'를 뜻하며, 시퀀스를 객체로 사용하여 자동으로 증가하는 숫자로 사용한다. 시퀀스 생성 예시 CREATE SEQUENCE [이름] INCREMENT BY [증감숫자] START WITH [시작숫자] MINVALUE [최솟값] MAXVALUE [최대값] CYCLE OR NOCYCLE CACHE [숫자, 생략가능] OR NOCACHE ORDER OR NOORDER 위 옵션들을 하나씩 알아보자. 1) INCREMENT BY [증감숫자] 시퀀스에서 생성할 번호의 증가 값이다. 설정하지 않으면 default 1을 가진다. 2) START WITH [시작 숫자] 시퀀스의 시작값을 지정한다. 3) MINVALUE [최솟값] 시퀀스에서 생성할 번호의 최솟값을 지정한다. 4) MAXVALUE..

    Read more
  • 조인의 개념 - 두 개 이상의 테이블 들을 연결 또는 결합하여 데이터를 출력하는것 - JOIN은 관계형 데이터베이스의 가장 큰 장점이면서 대표적인 핵심 기능이라고 할 수 있다. - 일반적인 경우 행들은 PRIMARY KEY(PK)나 FOREIGN KEY(FK) 값의 연관에 의해 JOIN이 성립된다. - 하지만 어떤 경우에는 이러한 PK, FK의 관계가 없어도 논리적인 값들의 연관만으로 JOIN이 성립 가능하다. Inner Join (내부 조인) 1) Equi Join (동등 조인) - 두 개의 테이블 간에 컬럼 값들이 서로 정확하게 일치하는 경우에 사용된다. - 위 세타조인 중 비교연산자 = 를 사용한 조인이다. - 동등 조건에 해당하는 튜플을 반환한다. 예제 쿼리 SELECT 테이블1.칼럼명, 테이블2..

    Read more
  • 문제 https://programmers.co.kr/learn/courses/30/lessons/42889 코딩테스트 연습 - 실패율 실패율 슈퍼 게임 개발자 오렐리는 큰 고민에 빠졌다. 그녀가 만든 프랜즈 오천성이 대성공을 거뒀지만, 요즘 신규 사용자의 수가 급감한 것이다. 원인은 신규 사용자와 기존 사용자 사이에 스 programmers.co.kr 풀이코드 package seohae.thiscodingtest.part03.Q25_FailureRate; import java.util.Arrays; import java.util.HashMap; import java.util.Map; import java.util.PriorityQueue; import java.util.stream.Collectors; ..

    Read more
  • lowerBound [1, 1, 2, 2, 2, 2, 3] 의 배열에서 2가 나오는 첫번째 인덱스를 구하고 싶은 경우 ... /** * 처음으로 나오는 target 보다 작은 수 */ private static int lowerBound() { int start = 0; int end = arr.length; // start 가 마지막 인덱스 직전까지 체크되어야한다. while (start < end) { int mid = (start + end) / 2; /* target 이 중간값보다 작거나 같다면, 끝을 중간값으로 */ if (X = arr[mid]) { /* target 이 중간값보다 크거나 같다면, 시작을 중간값 다음으로 */ start = mid + 1; } else { /* target 이 ..

    Read more
  • Stream 코드 /* num sum */ int numSum = param.chars() .filter(Character::isDigit) .map(a -> Character.digit(a, 10)) .sum(); 결과 param = "K1C57PQR" numSum = 13 (1 + 5 + 7)

    Read more
  • Stream 코드 String chars = param.chars() .sorted() .mapToObj(ch -> (char) ch) // Stream .filter(ch -> !Character.isDigit(ch)) .map(Object::toString) .collect(Collectors.joining()); 각 단계별로 Stream 형태 확인 결과 param = "AC2B332" chars = "ABC"

    Read more
  • Stream 코드 private static void getPairs() { List numbersA = Arrays.asList(1, 2, 3); List numbersB = Arrays.asList(4, 5); List pairs = numbersA.stream() .flatMap(i -> numbersB.stream() .map(j -> new int[]{i, j})) .collect(toList()); for (int[] a : pairs) { System.out.println(Arrays.toString(a)); } } 결과 [1, 4] [1, 5] [2, 4] [2, 5] [3, 4] [3, 5]

    Read more
  • 문제 A, B 총 2명의 사람이 있다. 두사람은 서로 다른 볼링공을 골라야한다. 볼링공은 총 N개이며, 각 볼링공마다 무게가 있다. 공의 번호는 1번부터 N까지다. 예시) N = 5, M = 3 공의 번호 : 1 2 3 4 5 공의 무게 : 1 3 2 3 2 이때 두사람이 고를 수 있는 볼링공 번호의 조합 개수는? (1, 2) -> (1, 3) (1, 3) -> (1, 2) (1, 4) -> (1, 3) (1, 5) -> (1, 2) (2, 3) -> (3, 2) (2, 4) -> (3, 3) -> 불가능 (2, 5) -> (3, 2) (3, 4) -> (2, 3) (3, 5) -> (2, 2) -> 불가능 (4, 5) -> (3, 2) -> 총 8개다. 풀이코드 import java.io.Buffere..

    Read more
  • synchronized 키워드 해당 메서드나 블록을 한번에 한 스레드씩 수행하도록 보장한다. 많은 프로그래머가 동기화를 배타적 실행, 즉 한 스레드가 변경하는 중이라서 상태가 일관되지 않은 순간의 객체를 다른 스레드가 보지 못하게 막는 용도로만 생각한다. 한 객체가 일관된 상태를 가지고 생성되고, 이 객체에 접근하는 메서드는 그 객체에 락(lock)을 건다. 락을 건 메서드는 객체의 상태를 확인하고 필요하면 수정한다. 즉, 객체를 하나의 일관된 상태에서 다른 일관된 상태로 변화시킨다. 동기화를 제대로 사용하면 어떤 메서드도 이 객체의 상태가 일관되지 않은 순간을 볼 수 없을 것이다. 여기에 중요한 기능이 한가지 더 있다. 동기화 없이는 한 스레드가 만든 변화를 다른 스레드에서 확인하지 못할 수도 있다. ..

    Read more
  • DB Lock

    DB Lock Database는 여러 곳에서 동시에 접근할 수 밖에 없는 구조이다. 동시에 접근시 데이터가 오염될 가능성이 있기 때문이다. Database는 데이터의 일관성과 무결성을 유지하기 위해 Lock을 사용한다. 데이터의 일관성 : 어떤 데이터가 서로 모순 없이 일관되게 일치한다. 트랜잭션이 실행을 성공적으로 완료하면 모순 없이 일관성 있는 데이터베이스 상태를 보존한다. 데이터의 무결성 : 어떤 데이터의 값이 정확한 상태로, Database에 저장된 데이터의 일관성과 정확성을 유지하기위한 제약조건이다. Lock은 트랜잭션 처리의 순차성을 보장해주는 기능을 제공하며, 하나의 트랜잭션이 완벽하게 끝날때까지 다른 요청을 막는다. Lock의 종류 1) Shared Lock (=Read Lock) 공유락은..

    Read more

    DB Lock

  • 예외 무시 API 설계자가 메서드 선언에 예외를 명시하는 까닭은 그 메서드를 사용할때 적절한 조치를 취해달라고 말하는 것이다. 하지만 이 예외를 무시하기란 아주 쉽다. 해당 메서드 호출을 try~catch를 사용하여 무시할 수 있기 때문이다. 예외 무시 // catch 블록을 비워두면 예외가 무시된다. try { ... } catch (SomeException ignored) {} 예외는 문제 상황에 잘 대처하기 위해 존재하는데 catch 블록을 비워두면 예외가 존재할 이유가 사라진다. 예외를 무시해야할 경우 예외를 무시해야 할때도 있다. 예를들어 FileInputStream을 닫을때, 파일의 상태를 변경하지 않았으니 복구할 것이 없으며, 필요한 정보는 다 읽었으므로 남은 작업을 중단할 이유도 없다. 혹..

    Read more
  • 실패 원자적 작업 도중 예외가 발생해도 그 객체는 여전히 정상적으로 사용할 수 있는 상태라면 코드가 더 유용해진다. 검사 예외를 던진 경우라면 호출자가 오류 상태를 복구할 수 있을테니 특히 더 유용할 것이다. 호출된 메서드가 실패하더라도, 해당 객체는 메서드 호출 전 상태를 유지해야한다. 이러한 특성을 '실패 원자적(failure-atomic)' 이라고 한다. 실패 원자적으로 만드는 방법 메서드를 실패 원자적으로 만드는 방법은 다양하다. 1) 불변 객체로 설계한다. 불변 객체는 태생적으로 실패 원자적이다. 메서드가 실패하면 새로운 객체가 만들어지지는 않을 수 있으나, 기존 객체가 불안정한 상태에 빠지는 일은 결코 없다. 불변 객체의 상태는 생성 시점에 고정되어 절대 변하지 않기 때문이다. 2) 가변 객체..

    Read more
  • 문제 https://www.acmicpc.net/problem/3190 3190번: 뱀 'Dummy' 라는 도스게임이 있다. 이 게임에는 뱀이 나와서 기어다니는데, 사과를 먹으면 뱀 길이가 늘어난다. 뱀이 이리저리 기어다니다가 벽 또는 자기자신의 몸과 부딪히면 게임이 끝난다. 게임 www.acmicpc.net 풀이코드 package seohae.thiscodingtest.part03.Q11_Snake; import java.util.*; /* https://www.acmicpc.net/problem/3190 */ /* Dummy 도스 게임 사과를 먹으면 뱀 길이가 늘어나고, 벽 또는 자기 자신의 몸과 부딪히면 게임이 끝난다. N x N 정사각형 보드 사과의 위치 보드의 상하좌우 끝 : 벽 첫 시작의 뱀 ..

    Read more
  • 예외의 상세 메시지 권장 예외를 잡지 못해 프로그램이 실패하면 자바 시스템은 그 예외의 스택 추적(stack trace) 정보를 자동으로 출력한다. 스택 추적은 예외 객체의 toString 메서드를 호출하여 얻는 문자열이다. 이 정보가 실패 원인을 분석하는 유일한 정보인 경우가 많으며 해당 실패를 재현하기 어렵다면 더 자세한 정보를 얻기가 어렵거나 불가능하다. 따라서 예외의 toString 메서드에 실패 원인에 관한 정보를 가능한 한 많이 담아 반환하는 일이 아주 중요하다. 사후 분석을 위해 실패 순간의 상황을 정확히 포착해 예외의 상세 메시지에 담아야한다. 실패 순간을 포착하려면 발생한 예외에 관여된 모든 매개변수와 필드의 값을 실패 메시지에 담아야한다. 예외가 발생한 원인은 제각각이므로, 예외의 상세..

    Read more
  • Copyright 2024. GRAVITY all rights reserved