전체 글 77

[프로그래머스] 124 나라의 숫자

programmers.co.kr/learn/courses/30/lessons/12899 코딩테스트 연습 - 124 나라의 숫자 programmers.co.kr 알고나면 어렵지 않아보이지만 막상 접근하기 쉽지 않았던 문제였다. 일단, 접근 방법이 떠오르지 않아서 다른 사람의 풀이를 참조했다. n이 5억이다. 적어도 O(N)으로는 풀 수 없는 문제라는 얘기이다. 따라서, 규칙을 찾아서 풀어야하는데 일단 3으로 나눠본다. 나눴더니 어느정도 규칙이 보인다. 나머지가 0일 때 4, 1일 때 1, 2일 때 2이다. 여기까지는 생각했는데 두 자리 숫자가 되면 어떻게 되지에서 막혀버렸다. 풀이는 간단하다. 우리가 흔히 알고 있는 10진수를 2진수로 바꾸는 방법처럼 풀면 된다. 몫이 0이 될 때까지 나눈 후에 나머지를 ..

Oracle 평균 구하기

오라클에서 AVG 함수를 사용하면 평균을 쉽게 구할 수 있다. 그러나 NULL값을 처리하지 않으면 평균 값에 오류가 생길 수 있다. 왜냐하면 AVG함수는 NULL값을 제외하고 처리하기 때문이다. 필요에 사용용도가 다르겠지만 보통 전체를 처리하는 경우가 많기 때문에 NULL값을 치환해서 사용해야한다. SELECT AVG(NVL(comm, 0)) AS avg1 , SUM(comm)/COUNT(*) AS avg2 FROM emp 두 개의 결과 값은 동일하다. NULL이 있다면 0으로 치환해줬기 때문에 AVG내에 NULL이 없기 때문에. NVL이 없으면 결과 값은 달라질 수 있다. gent.tistory.com/313 [Oracle] 오라클 평균 구하는 방법 (AVG 함수 주의점) 오라클에서 AVG 함수를 사용..

Backend/SQL 2021.03.30

Maven

아래 참조 블로그를 보고 명확하게 이해하기 위해 클론한 것입니다. Maven을 알아보기 전에 사전 지식을 알아보자. 1. 빌드(Build) Build는 소스코드 파일을 컴퓨터에서 실행할 수 있는 독립 소프트웨어 가공물로 변환하는 과정 또는 그에 대한 결과물이다. - wiki 한 마디로 개발자가 작성한 소스코드 및 각 자원들(xml, jpg, properties)을 JVM이나 WAS가 인식할 수 있는 구조로 패키징하는 과정 및 결과물이다.(jar, war 등) 2. 빌드 도구(Build Tool) 프로젝트 생성, 테스트, 빌드, 배포 등의 작업을 위한 프로그램 라이브러리 추가, 버전 동기화 등의 어려움을 해소하기 위해 등장 Ant -> Maven -> Gradle의 추세 Maven 1. 정의 및 특징 자바..

Backend/Spring Boot 2021.03.29

JPA, Spring Data JPA

서사 JDBC API -> SQL Maapper(Spring JDB, Mybatis) - Spring Data JPA 순으로 추상화가 되었음 JPA(Java Persistence API) - 자바 어플리케이션에서 관계형 데이터베이스를 사용하는 방식을 정의한 인터페이스 Hibernate: JPA 인터페이스 구현체 중 하나로 가장 대표적인 구현체 Spring Data JPA - ORM을 위한 자바 EE표준이며 jpa를 쉽게 사용하기 위해 Spring에서 제공하고 있는 프레임워크 - Spring Boot에서 인터페이스를 만들고 JpaRepository를 상속받아서 사용한다. - Spring-data-jpa -> Hibernate -> JPA (추상화정도) - 개발자가 JPA를 사용하면 JPA 내부에서 JDBC..

Backend/JPA 2021.03.29

[프로그래머스] 거스름돈

programmers.co.kr/learn/courses/30/lessons/12907 코딩테스트 연습 - 거스름돈 Finn은 편의점에서 야간 아르바이트를 하고 있습니다. 야간에 손님이 너무 없어 심심한 Finn은 손님들께 거스름돈을 n 원을 줄 때 방법의 경우의 수를 구하기로 하였습니다. 예를 들어서 손님께 5 programmers.co.kr 규칙찾기도 굉장히 어렵고 그것을 코드로 구현할 때도 2차원 배열이 아닌 1차원 배열로 중첩해서 푸는 방식이 인상적인 문제였다. 어떻게 푸는지 몰라서 블로그를 많이 참고했고 이해하기도 어려웠다. 2차원 배열로 했을 때 행렬을 만들게 되면 기본적으로 O(N^2)이상이 되기 때문에 시간초과가 날 것이다. 따라서, 아래와 같이 푼다면 이중 for문이지만 money.len..

Algorithm/DP 2021.03.25

[프로그래머스] 가장 먼 노드

programmers.co.kr/learn/courses/30/lessons/49189 코딩테스트 연습 - 가장 먼 노드 6 [[3, 6], [4, 3], [3, 2], [1, 3], [1, 2], [2, 4], [5, 2]] 3 programmers.co.kr 해석을 하면 탐색을 활용하여서 가장 깊은 leaf node가 몇 개 있는지 보라는 문제로 해석할 수 있을 것 같다. 처음에 dfs로 접근하려고 하니까 leaf node의 레벨이 각각 다를텐데 끝을 확인하기 어려울거라고 생각했다. 또, 전에 있는 노드가 연결되어 있는 부분은 가지 않아야 하니까(최단거리) 비교해야 하는게 좀 많아서 어렵게 느껴졌다. bfs를 잘 활용하지 않았어서 각 블로그를 참고했고 가장 이해하기 쉬운 블로그를 참고하여 풀게 되었다..

Algorithm/BFS 2021.03.24

[baekjoon #11726] 2×n 타일링

dp를 이해하는데 가장 기본이 되면서 중요한 문제가 아닐까 싶다. dp는 기본적으로 bottom-up 방식을 선호하는데 차례차례 적다보면 규칙이 보이기 때문이다. 이게 쉽게 찾아지냐 안 찾아지냐의 차이에 따라서 dp의 난이도가 결정되는 것 같다. 이 문제 같은 경우는 n-1과 n-2를 통해서 n을 찾는 문제이다. n-1 경우에 한 개를 더 붙인 경우, n-2 경우에 두 개를 더 붙인 경우라고 가정하고 풀면 n의 경우가 나오게 되는 걸 알 수 있다. 실제로 n=4의 경우의 수를 그려보고 n=3과 n=2의 경우를 그려보고 막대기를 갖다댄다면 4의 경우수만큼 그릴 수 있다. import java.util.*; import java.io.*; public class Main { public static void..

Algorithm/DP 2021.03.23

Micro Service란?

MSA(Micro Service Architecture)는 거대한 구조(Monolithic)로 되어있는 Service를 여러 소규모의 Service로 나누는 구조 및 방법이라고 생각한다. 먼저, 대조되는 아키텍처인 Monolithic의 특징을 보자. 가장 접근하기 쉬운 아키텍처로 소스 전체를 하나의 WAR파일로 구성하여 배포하는 전통적인 개발 방식이다. 모두 동일한 개발 환경 및 툴을 사용 개발환경 구성 간단 성능의 제약이 덜하다(각 기능을 함수로 호출) 트랜잭션 처리 간단 작은 규모의 어플리케이션에 적합 여러 장점을 가지고 있지만 유지보수를 하면서 혹은 새로운 기능의 추가로 어플리케이션은 점점 거대하지기 시작한다. 이벤트와 포인트 기능이 추가되었다. 하나의 서비스에서 너무 많은 기능을 가지게 되었다. ..

Architecture/MSA 2021.03.22

Transaction처리는 어떻게?

기존 모놀리식 서비스에서는 보통 통합 데이터베이스(단일 DB)를 사용하며 데이터의 일관성을 위한 트랜잭션은 어렵지않다. 그러나, 마이크로 서비스에서의 트랜잭션은 간단하지 않다. 마이크로 서비스로 개발하게 되면 보통 서비스마다 저장소를 분리하는 패턴(Database Per Service)을 사용할 것이고 저장소가 격리되어 있기 때문에 각각의 저장소를 다르게 선택할 수 있다.(Polyglot) 이를 한 트랜잭션으로 묶는 것은 새로운 문제이다. MSA환경에서 크게 2가지의 패턴으로 트랜잭션을 처리한다. 2PC(Two Phase Commit, 전통적인 방법) Try Confirm Cancel이라고도 불리는 이 방법은 분산 시스템에서 꽤 괜찮은 성능을 보이기 때문에 사용되었다고 한다. 준비와 처리 2단계로 진행된..

Architecture/MSA 2021.03.22

[baekjoon #2225]합분해

dp는 규칙을 찾아서 간결하게 푸는 문제인데 정리능력이 부족한건지 집중력 부족인지 잘 해결하지 못했다. 다른 블로그 참조해서 보려고 해도 이해가 전혀 가지 않아서 찾고 찾다가 아주 쉽게 풀어놓은 블로그가 있어서 그걸 보고 겨우 이해했다. 간결하게 테이블로 규칙을 찾아서 하나씩 해보는 연습이 필요할듯 싶다. 기초문제이지만 멘탈을 엉망진창으로 만들 수 있다는 걸 보여준 사례... public static final int MOD = 1000000000; static int N, K; public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System..

Algorithm/DP 2021.03.22