Go, Vantage point
가까운 곳을 걷지 않고 서는 먼 곳을 갈 수 없다.
Github | https://github.com/overnew/
Blog | https://everenew.tistory.com/
문제 https://leetcode.com/problems/minimum-window-substring/ Minimum Window Substring - LeetCode Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com 풀이 난이도: Hard 모든 위치에서부터 끝까지 일일이 확인하는 것은 O(N^2)의 복잡도를 가진다. 문자열의 길이가 최대 10,000 이기 때문에 시간 복잡도로 위험해 보인다. 따라서 슬라이딩 윈도우 기법을 적용해보자. left에서 시작해 t를 모두 가지는 rig..
외래키의 위치 일단 데이터베이스의 개념부터 설명하고 들어가자. 두개의 엔티티가 관계(연관)를 가지면 외래키가 두 엔티티중 하나에 들어가야한다. 예를 들어 프로젝트와 프로젝트 매니저 사원의 관계를 생각해보자. 프로젝트에는 단 한명의 매니저가 반드시 존재한다. (프로젝트가 관계에 완전 참여) 따라서 소수의 인원만이 프로젝트 매니저가 된다. (사원은 관계에 부분 참여) 즉, 다음과 같이 표현된다. 일단, 사원 테이블에 자신이 매니저를 맞고있는 컬럼이 있다고 생각해보자. 해당 컬럼은 프로젝트의 기본키를 외래키로 가져오게 된다. 그러나 소수의 사원만 매니저를 담당하므로 대부분의 사원에게는 NULL 값이 삽입되어야 한다. 수 많은 사원들의 해당 필드값이 NULL로 채워진다면, 공간을 낭비하게 된다. 반대로 프로젝트..
Linux에서 procfs와 procseq 관련 C언어 소스코드를 컴파일하면 다음과 같은 오류가 발생할 때가 있다. error: variable 'proc_ops' has initializer but incomplete type 해당 오류를 문법적인 문제라 생각했는데, 사실 Linux 커널에서 procfs와 procseq를 위해 사용하는 proc_ops는 버전에 따라 사용이 가능하다. 출처: https://embetronicx.com/tutorials/linux/device-drivers/procfs-in-linux/ 위의 답글에 따르면 Linux 커널의 버전이 5.5 이상에서만 struct proc_ops 를 사용할 수 있다고 안내되어 있다. 다음의 명령어로 본인의 linux 커널 버전을 확인해보니, ..
MariaDB로 새로 JPA를 공부하다 미칠뻔한 오류를 만나 정리해본다. .... spring.jpa.hibernate.ddl-auto=create-drop Maria DB에서는 application.properties 에 이와 같은 설정을 해두면 Entity 저장시 자동으로 SQL 구문이 생성되어 Table이 새로 만들어진다. 그래서 본인은 일단 두개의 엔티티가 서로를 참조하게 만들었는데, 하나는 테이블이 잘 생성이 되지만 하나는 죽어도 오류가 나면서 spring error: 1146-42s02: table doesn't exist 오류가 발생했다. 이리저리 구글링을 해보며 해결법을 적용을 해보아도 해결이 되지 않았는데 전체 오류를 천천히 읽어보니 Table 생성 sql 구문 다음에 이와 같은 오류를 ..
이전 게시글에 이어서 Entity와 DTO 간의 변환 방법에 대해 소개하겠다. [Spring] DAO, DTO, Entity, 기본 계층 설계 계층 구조를 유지하기 위해서는 데이터베이스의 Entity와 DTO 간의 변환이 빈번히 일어나게 된다. 개발 초기 단계에서는 자주 클래스의 field들이 바뀌거나 추가된다. 이때 Entity와 DTO 간의 변환의 역활을 하는 기능은 field의 변동이 있을 때마다 계속 수정을 해주어야 한다. Entity의 종류가 한두개면 모르겠지만, 수십 개가 있다면 이러한 작업은 반복적일 뿐만 아니라 유지보수도 힘들다. 라이브러리 추가 이를 위해 자바 진영에서 사용하는 라이브러리가 MapStruct이다. https://mapstruct.org/ MapStruct – Java be..
문제 https://leetcode.com/problems/longest-repeating-character-replacement/ Longest Repeating Character Replacement - LeetCode Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com 풀이 난이도: Medium 풀이를 이해하기도 힘들었던 어려운 문제였다. 일단 문자열의 최대길이는 50,000이므로 단순히 전부 시도해보는 것은 무리다. 정답인 위치의 subString을 생각해보자. 해당 subS..
문제 https://leetcode.com/problems/longest-substring-without-repeating-characters/ Longest Substring Without Repeating Characters - LeetCode Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com 풀이 난이도: Medium 일단 본인의 풀이를 소개하고 나서 더 간단한 방법을 설명하겠다. 먼저, 문자열의 각 (idx 번째)문자로 부터 오른쪽으로 이동하여 가장 가까운 같은 문자가 나오..
문제 Word Search - LeetCode Word Search - LeetCode Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com 풀이 난이도: Medium Matirx로 분류되어 있지만, DFS로 해결 가능한 문제였다. 간단히, 문자열의 시작 문자와 동일한 위치에서부터 상하좌우 네 방향을 DFS로 탐색해 나가면 된다. 너무 간단하므로 아래에서는 follow-up 문제까지 고민해보기로 하자. DFS 풀이 코드 좀 더 생각해보기 (pruning) 이번 문제의 follow-up..
DTO(Data Transfer Object) 스프링은 크게 아래의 3가지 계층로 나눠진다. 컨트롤러 - 비즈니스 - 데이터 이때 계층 사이에 이동하는 데이터는 항상 같은 클래스를 이용하는 것이 아니다. 실제로 데이터베이스에 저장되는 엔티티 클래스를 모든 계층에서 사용하기 보다는 DTO(Data Transfer Object)로 변환하여 정말 필요한 데이터와 로직만을 담는다. 예를 들어 DTO는 데이터 이동만을 담당하므로 setter와 같은 매서드를 포함시키지 않는 방식이다. 아래의 그림 처럼 데이터베이스와 관련이 있다면 Entity로 다루고, 데이터 쪽에서 멀어질 수록 간단한 DTO로 데이터를 다룬다. 비즈니스 계층과 데이터 계층간의 데이터 이동은 DTO 또는 Entity를 사용한다. 이는 팀별 업무 규..
문제 https://leetcode.com/problems/rotate-image/ Rotate Image - LeetCode Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com 풀이 난이도: Medium 이것도 일반적으로 푼다면 다음과 같이 순서를 읽어버리면 된다. 하지만 In-place 알고리즘으로 해결해야 하므로, 2차원 배열을 새로 생성하는 과정을 진행하면 안 된다. 이를 위해 어쩔수 없이 2차 for문으로 하나 하나 이동시켜야 한다. 이때 2차원 행렬을 양파의 껍질(shel..