전체 글
[Java] 프로그래머스 Lv2 - [3차] 압축 (2018 KAKAO BLIND RECRUITMENT)
🔗 문제링크 코딩테스트 연습 - [3차] 압축 TOBEORNOTTOBEORTOBEORNOT [20, 15, 2, 5, 15, 18, 14, 15, 20, 27, 29, 31, 36, 30, 32, 34] programmers.co.kr 📂 분류 구현 💡 풀이 문제 설명에 나와 있는 LZW 압축 과정을 구현하면 되는 문제이다. 접근 방식 A ~ Z까지 HashMap을 이용해 초기화를 한다. 현재 단어 w와 다음 단어 c를 받는다. w + c가 map에 저장되어있는지 확인하고, 저장되어있다면 continue로 건너뛰어 위 과정을 다시 진행한다. w + c가 없다면, w 값을 출력하고 map에 저장한 다음 w를 초기화시켜준다. 💻 코드 import java.util.ArrayList; import java.u..
[Java] 프로그래머스 Lv2 - 3 x n 타일링
🔗 문제링크 코딩테스트 연습 - 3 x n 타일링 programmers.co.kr 📂 분류 DP 💡 풀이 이 문제는 2 x n 타일링을 응용한 문제이다. 세로 길이가 3인 바닥이기 때문에 n이 홀수 일 경우 타일 배치를 하지못한다. 처음 점화식은 dp[i] = dp[i - 2] * 4 - dp[i - 4]로 쉽게 구해졌으나 나머지 연산에 문제가 있어서 이 점화식으로는 문제를 해결하지 못했다. 다른 점화식을 구하려고 고민을 했으나 생각이 나지않아 풀이법을 참고해서 풀었다. 점화식은 다음과 같다. tiles[i] = tiles[i - 2] * 3 + tiles[i - 4] * 2 + tils[i - 6] * 2 ... 💻 코드 public class Solution { private static final ..
[Java] 프로그래머스 Lv2 - 2 x n 타일링
🔗 문제링크 코딩테스트 연습 - 2 x n 타일링 가로 길이가 2이고 세로의 길이가 1인 직사각형모양의 타일이 있습니다. 이 직사각형 타일을 이용하여 세로의 길이가 2이고 가로의 길이가 n인 바닥을 가득 채우려고 합니다. 타일을 채울 때는 programmers.co.kr 📂 분류 DP 💡 풀이 2 x n 타일링 문제는 메모이제이션을 대표하는 문제이다. 이 문제는 bottom-up 방식과 top-down 방식 두 가지로 해결할 수 있는데, 나는 bottom-up 방식으로 접근하여 문제를 해결했다. 접근 방식 n이 1일 경우 가로로만 배치할 수 있기 때문에 배치할 수 있는 경우는 한 가지만 존재한다. n이 2일 경우 가로로 배치하고 세로로도 배치할 수 있기 때문에 배치할 수 경우는 두 가지가 존재한다. n이..
[Java] 프로그래머스 Lv2 - 가장 큰 정사각형 찾기
🔗 문제링크 코딩테스트 연습 - 가장 큰 정사각형 찾기 [[0,1,1,1],[1,1,1,1],[1,1,1,1],[0,0,1,0]] 9 programmers.co.kr 📂 분류 DP 💡 풀이 DP Bottom-up 방식으로 해결되는 문제이다. 접근방식 정 사각형의 넓이를 구하는 문제이기 때문에 왼쪽, 위쪽이 하나라도 0이라면 넓이는 1이 된다. 따라서 점화식은 아래와 같이 나온다. cache[i][j] = Math.min(cache[i - 1][j - 1], Math.min(cache[i - 1][j], cache[i][j - 1])) + 1; 💻 코드 public class Solution { private int[][] cache; public int solution(int[][] board) { in..
[Java] 프로그래머스 Lv2 - [3차] 방금 그 곡 (2018 KAKAO BLIND RECRUITMENT)
🔗 문제링크 코딩테스트 연습 - [3차] 방금그곡 방금그곡 라디오를 자주 듣는 네오는 라디오에서 방금 나왔던 음악이 무슨 음악인지 궁금해질 때가 많다. 그럴 때 네오는 다음 포털의 '방금그곡' 서비스를 이용하곤 한다. 방금그곡에서는 TV, programmers.co.kr 💡 풀이 문자열 스플릿처리 한 후 문제를 해결하는 문제이다. 접근 방식 음 코드를 분리하기 위해 'C#', 'D#, 'F#', 'G#', 'A#' 를 'c', 'd', 'f', 'g', 'a' 로 바꿔준다. 재생 시간과 멜로디의 길이를 맞춰준다. 재생 시간, 음악 제목, 멜로디 정보를 클래스 객체로 만들어 리스트에 저장한 후 재생 시간 내림차순으로 정렬한다. 💻 코드 import static java.lang.Integer.parseIn..
[NUMBLE] 연계형 모바일용 웹 서비스 만들기 챌린지를 마치며
4주 동안의 연계 모바일용 웹 서비스 챌린지가 오늘로써 막을 내렸다. 회고록을 바로바로 작성하려고 했으나 변명이겠지만 기간이 짧은 탓에 바로 작성하지 못했다.🥲 전체적인 코드를 다시 살펴보고 작성하려고 했지만, 제출 기간이 오늘 자정까지라 지금은 떠오르는 부분만 회고록을 작성했다. 넘블을 시작하게 되었던 계기 👀 지인이 넘블 추천을 해주어서 넘블을 접하게 되었다. 그래서 넘블을 검색해보니, 실전 프로젝트를 경험할 수 있는 곳이라는 것을 알게 되었고, 지인이 넘블을 통해 기술적으로 성장하고 도움이 되었다는 후기를 말해줘서 넘블을 시작해야겠다! 다짐했었다. 그리고node.js에서SpringBoot로 스택을 바꾼 후 새로운 기술 스택에 관한 공부와 적응하기 위해 프로젝트가 필요했던 저에게는 아주 좋은 기회라고..
[JPA] @MappedSuperclass
인프런 김영한님 자바 ORM 표준 JPA 프로그래밍 - 기본 편 강의 내용 정리 @MappedSupberclass 공통 매핑 정보가 필요할 때 사용한다. 상속관계 매핑과는 전혀 관계가 없다. 엔티티가 아니기 때문에 테이블과 매핑이 되지않는다. 부모 클래스를 상속 받는 자식 클래스에 매핑 정보만 제공한다. 직접 생성해서 사용할 일이 없으므로 추상클래스로 쓰는 것을 권장된다. 🖥 예시 코드 // BaseEntity.java @MappedSupercalss @Getter public abstract class BaseEntity { private LocalDateTime createdAt; private LocalDateTime modifiedAt; } // Member.java @Entity @Getter ..
[JPA] 상속 관계 매핑
인프런 자바 ORM 표준 JPA 프로그래밍 - 기본 편 강의 내용 정리 상속 관계 매핑 관계형 데이터베이스(RDBMS)에서는 객체지향 언어의 상속 개념이 없다. 하지만 슈퍼타입, 서브타입 관계라는 모델링 기법이 객체 상속과 유사하다. 상속관계 매핑이란, 객체의 상속 구조와 DB의 슈퍼 타입 서브타입 관계를 매핑하는 것이다. 슈퍼타입 서브타입 논리 모델을 실제 물리 모델로 구현하는 방법은 다음과 같다. 각 테이블로 변환 : 조인 전략 ➡️ 각각 테이블을 만들고 조회할 때 조인 통합 테이블로 변환 : 단일 테이블 전략 ➡️ 하나의 테이블에 컬럼들을 모두 통합해서 사용 서브타입 테이블로 변환 : 구현 클래스마다 테이블 전략 ➡️ 서브 타입마다 하나의 테이블로 만듦 객체는 타입이 있지만 테이블은 타입이라는 개념..
[자바의 정석] 8장 예외처리(Exception handling)
예외처리(Exception handling) 프로그램이 실행 중 어떤 원인에 의해서 오작동을 하거나 비정상적으로 종료되는 경우가 있다. 이러한 결과를 초래하는 원인을 프로그램 에러 또는 오류라고 한다. 컴파일 에러(compile-time error) 컴파일 시에 발생하는 에러 런타임 에러(runtime error) 실행 시에 발생하는 에러 논리적 에러(logical error) 실행은 되지만, 의도와 다르게 동작하는 것 런타임 에러를 방지하기 위해서는 프로그램의 실행 도중 발생할 수 있는 모든 경우의 수를 고려하여 이에 대한 대비를 하는 것이 필요하다. 자바에서는 runtime 시 발생할 수 있는 프로그램 오류를 'error'와 'exception', 두 가지로 구분하였다. error 메모리 부족(Out..