분류 전체보기

    [카카오] k진수에서 소수 개수 구하기 (java)

    [카카오] k진수에서 소수 개수 구하기 (java)

    문제링크 https://programmers.co.kr/learn/courses/30/lessons/92335# 코딩테스트 연습 - k진수에서 소수 개수 구하기 문제 설명 양의 정수 n이 주어집니다. 이 숫자를 k진수로 바꿨을 때, 변환된 수 안에 아래 조건에 맞는 소수(Prime number)가 몇 개인지 알아보려 합니다. 0P0처럼 소수 양쪽에 0이 있는 경우 P0처럼 소 programmers.co.kr 문제풀이 👨🏻‍💻 핵심 스킬 👨🏻‍💻 소수, 재귀 n으로 주어진 숫자를 k진수로 변경한 후 0을 오른쪽 또는 왼쪽으로 가지고 있는 수들이 소수인지 판단하여 개수를 구해주는 문제이다. 10진수인 n을 k진수로 변경하는 방법은 재귀와 나누기 그리고 %연산을 활용하여 만들 수 있다. %연산을 하여 구한 m..

    [카카오]  주차 요금 계산 (java)

    [카카오] 주차 요금 계산 (java)

    문제링크 https://programmers.co.kr/learn/courses/30/lessons/92341 코딩테스트 연습 - 주차 요금 계산 [180, 5000, 10, 600] ["05:34 5961 IN", "06:00 0000 IN", "06:34 0000 OUT", "07:59 5961 OUT", "07:59 0148 IN", "18:59 0000 IN", "19:09 0148 OUT", "22:59 5961 IN", "23:00 5961 OUT"] [14600, 34400, 5000] programmers.co.kr 문제풀이 👨🏻‍💻 핵심 스킬 👨🏻‍💻 구현, Map 주차요금계산 문제는 입력으로 들어오는 주차에 대한 record정보로 하루동안 차량의 출입 여부로 시간을 계산하여 그 날동안 ..

    JPA 상속관계 매핑하기(+ @MappedSuperclass)

    JPA 상속관계 매핑하기(+ @MappedSuperclass)

    도입 지난 시간에 JPA를 활용해 객체와 연관관계 매핑을 하는 방법을 알아보았다. 이번 시간에는 JPA를 활용하여 객체의 상속관계를 테이블로 표현하는 방법에 대하여 알아보고, 상속관계와는 다르지만 비슷해서 혼동하기 쉬운 개념인 @MappedSuperclass를 알아보도록 하겠다. 상속관계 매핑 객체지향언어에서는 중복되는 정보를 상속관계를 사용해 묶어줄 수있다. 예를들어 사람과 강아지 고양이는 모두 이름과 나이 그리고 구분지어줄 ID를 가지고 있다. 이러한 특징을 '동물'로 묶어서 상속해줄 수 있다. 객체에서는 이렇게 상속을 허용해주지만, 테이블에서는 이렇게 상속을 할 수 없다. 따라서 상속을 위해서는 전략을 사용해야한다. 상속의 전략을 사용하기 위해서는 @Inheritance annotation을 이용하..

    [카카오] 단체사진찍기 (java)

    [카카오] 단체사진찍기 (java)

    문제링크 https://programmers.co.kr/learn/courses/30/lessons/1835 코딩테스트 연습 - 단체사진 찍기 단체사진 찍기 가을을 맞아 카카오프렌즈는 단체로 소풍을 떠났다. 즐거운 시간을 보내고 마지막에 단체사진을 찍기 위해 카메라 앞에 일렬로 나란히 섰다. 그런데 각자가 원하는 배치가 모두 programmers.co.kr 문제풀이 👨🏻‍💻 핵심 스킬 👨🏻‍💻 브루트포스 순열 카카오 프렌즈 캐릭터 8명이 원하는 순서대로 사진을 찍을 수 있는 횟수를 구하는 문제이다. 캐릭터가 순서대로 서는 경우의수는 8!이며 최대로 들어올 수 있는 조건이 100개이다. 따라서 최악의 경우 $O(8!*100)$의 시간이 걸리게 된다. 따라서, 브루트포스로 문제를 해결할 수 있다. 순열로 문..

    JPA 연관관계 매핑하기

    JPA 연관관계 매핑하기

    도입 이번 시간에는 JPA에서 엔티티를 객체적으로 묶어보는 시간을 가져보려고 한다. DB처럼 구현을 하게 될 경우 연관이 되어있는 클래스에는 다른 엔티티의 key값을 넣어주게 되는데, 그러면 다시 그 키값으로 객체를 찾아주어야하는 번거로움이 생긴다. 따라서 이번시간에는 객체 자체를 받을 수 있는 연관관계 매핑을 알아보도록 하겠다. *지난 시간에는 기본키를 매핑하는 방법과 키값을 자동으로 주입시키는 전략을 알아보았다. 2022.01.12 - [Tech-Stack & Language/JPA] - JPA 기본 키 매핑하기 JPA 기본 키 매핑하기 도입 지난 시간에는 필드와 칼럼을 매핑하여 보았다. 이번에는 매핑된 칼럼중에서 Primary key를 지정하는 방법을 알아보도록 하겠다. Primary Key란 기본..

    [카카오] 오픈채팅방 (java)

    [카카오] 오픈채팅방 (java)

    문제링크 코딩테스트 연습 - 오픈채팅방 오픈채팅방 카카오톡 오픈채팅방에서는 친구가 아닌 사람들과 대화를 할 수 있는데, 본래 닉네임이 아닌 가상의 닉네임을 사용하여 채팅방에 들어갈 수 있다. 신입사원인 김크루는 카카오톡 오 programmers.co.kr 문제풀이 👨🏻‍💻 핵심 스킬 👨🏻‍💻 Map, 구현 카카오 오픈채팅방의 입장과 퇴장의 로그를 리턴해주는 문제이다. 닉네임을 변경하는 경우에는 과거의 입장 및 퇴장의 닉네임도 변경해주어야 한다. 닉네임을 변경하는 방법은 다시 입장시 혹은 방 안에서 변경이 가능하다. 닉네임은 Map을 활용하여 id와 닉네임을 매핑시켜주었다. 모든 record를 확인하여 출력해주어야할 log는 가변배열인 ArrayList를 사용해서 넣어주었고, 닉네임이 변경될 수 있는 경우..

    [카카오] 신고 결과 받기 (java)

    [카카오] 신고 결과 받기 (java)

    문제링크 코딩테스트 연습 - 신고 결과 받기 문제 설명 신입사원 무지는 게시판 불량 이용자를 신고하고 처리 결과를 메일로 발송하는 시스템을 개발하려 합니다. 무지가 개발하려는 시스템은 다음과 같습니다. 각 유저는 한 번에 한 명의 programmers.co.kr 문제풀이 👨🏻‍💻 핵심 스킬 👨🏻‍💻 Set(집합) 신고 결과 받기 문제는 유저들이 신고를 하는 정보를 확인하고 신고를 당한 횟수가 k 이상일 경우 정지를 주게 되는데, 그 때 정지를 받은 유저를 신고한 유저에게 알람을 준다면 알람을 받을 횟수를 확인하는 문제이다. 이 때 한 유저가 동일한 사람을 중복으로 신고하면 한번으로 처리를 해야한다. 이 조건을 만족시키기 위하여 나는 집합을 사용하여 구현하였다. 집합은 데이터를 중복없이 한개씩만 가지고 있..

    [BOJ_4574] 스도미노쿠 (java)

    [BOJ_4574] 스도미노쿠 (java)

    문제링크 https://www.acmicpc.net/problem/4574 4574번: 스도미노쿠 입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스의 첫째 줄에는 채워져 있는 도미노의 개수 N이 주어진다. (10 ≤ N ≤ 35) 다음 N개 줄에는 도미노 하나를 나타내는 U LU V LV가 www.acmicpc.net 문제풀이 👨🏻‍💻 핵심 스킬 👨🏻‍💻 재귀, 브루트포스, 백트래킹 스도미노쿠는 스도쿠 + 도미노를 의미하는 게임이다. 스도쿠의 규칙을 지켜주며, 도미노(2개의 쌍으로 이루어진 값)을 놓아주어 스도쿠를 풀어주는 문제이다. 도미노는 $(1,2), (1,3) (1,4) ... (7,8) (7,9) (8,9)$ 까지 1부터 9까지의 모든 값의 쌍으로 이루어져 있다. 그런데 $(1..

    JPA 기본 키 매핑하기

    JPA 기본 키 매핑하기

    도입 지난 시간에는 필드와 칼럼을 매핑하여 보았다. 이번에는 매핑된 칼럼중에서 Primary key를 지정하는 방법을 알아보도록 하겠다. Primary Key란 기본키를 의미한다. 기본키의 성질은 테이블 내에서 유일하고 null값이 없어야하며 변경되면 안된다. 따라서 테이블에서 데이터들을 유일하게 구분하는데 사용이된다. 이번 시간에는 이러한 기본 키를 매핑하는 방법을 알아보도록 하자. 2022.01.10 - [Tech-Stack & Language/JPA] - JPA로 필드와 칼럼 매핑하는 annotation 알아보기 JPA로 필드와 칼럼 매핑하는 annotation 알아보기 도입 지난 시간에는 객체와 엔티티를 매핑하는 방법에 대하여 알아보았다. 객체와 엔티티를 매핑하였다면, 다음에는 각 객체가 가지고 ..

    [BOJ_16197] 두 동전 (java)

    [BOJ_16197] 두 동전 (java)

    문제링크 https://www.acmicpc.net/problem/16197 16197번: 두 동전 N×M 크기의 보드와 4개의 버튼으로 이루어진 게임이 있다. 보드는 1×1크기의 정사각형 칸으로 나누어져 있고, 각각의 칸은 비어있거나, 벽이다. 두 개의 빈 칸에는 동전이 하나씩 놓여져 있고, www.acmicpc.net 문제풀이 👨🏻‍💻 핵심 스킬 👨🏻‍💻 브루트포스, 재귀 문제는 두 동전을 보드판에 올려놓고 상하좌우 중 한 곳으로 이동시켜 주어 하나의 동전만 떨어뜨리는 방법을 구하는 문제이다. 단, 동전이 움직일 때 벽을 만나게 되면 움직이지 못하며, 그 외의 경우에는 모두 움직여 줄 수 있다. 떨어지는 경우는 동전이 보드의 배열 밖으로 나가는(범위를 벗어나는) 경우가 된다. 이 문제를 브루트포스로 ..

    JPA로 필드와 칼럼 매핑하는 annotation 알아보기

    JPA로 필드와 칼럼 매핑하는 annotation 알아보기

    도입 지난 시간에는 객체와 엔티티를 매핑하는 방법에 대하여 알아보았다. 객체와 엔티티를 매핑하였다면, 다음에는 각 객체가 가지고 있는 속성(필드)와 엔티티의 칼럼을 매핑해주어야 한다. 이번 시간에는 칼럼과 필드를 매핑하는 과정을 알아보도록 하겠다. 2022.01.07 - [Tech-Stack & Language/JPA] - JPA로 객체와 테이블 매핑하기 JPA로 객체와 테이블 매핑하기 도입 지난 시간에는 JPA의 영속성 컨텍스트에 대하여 알아보았다. 영속성 컨텍스트는 JPA의 동작을 이해하기 위해 반드시 알아야할 부분으로 매우 중요한 내용이었다. 이번 시간도 JPA를 공부할 cnu-jinseop.tistory.com 칼럼과 필드를 매핑하는 방법 칼럼과 필드를 매핑하는 경우도 동일하게 어노테이션을 사용하..

    JPA로 객체와 테이블 매핑하기

    JPA로 객체와 테이블 매핑하기

    도입 지난 시간에는 JPA의 영속성 컨텍스트에 대하여 알아보았다. 영속성 컨텍스트는 JPA의 동작을 이해하기 위해 반드시 알아야할 부분으로 매우 중요한 내용이었다. 이번 시간도 JPA를 공부할 때 매우 중요한 부분을 알아보려고 한다. ORM은 객체로 RDB를 사용하는 기능을 제공한다고 하였다. JPA가 ORM으로 동작하기 위해서 객체와 테이블을 매핑해주어야 한다. 이번 시간에는 JPA로 어떻게 객체로 테이블을 매핑하는지 알아보도록 하겠다. 테이블 - 객체 연결 Annotation을 이용하자. 객체와 테이블을 매핑하기 위해서는 2개의 Annotation만 사용하면 된다. 클래스 하나당 하나의 테이블로 매핑을 시켜주어야 하므로 클래스에 @Entity를 붙여 주어야 한다. 그리고 어느 값이 키 값인지 알아내기..

    BOJ_14888 연산자 끼워넣기 (Java)

    BOJ_14888 연산자 끼워넣기 (Java)

    문제링크 https://www.acmicpc.net/problem/14888 14888번: 연산자 끼워넣기 첫째 줄에 수의 개수 N(2 ≤ N ≤ 11)가 주어진다. 둘째 줄에는 A1, A2, ..., AN이 주어진다. (1 ≤ Ai ≤ 100) 셋째 줄에는 합이 N-1인 4개의 정수가 주어지는데, 차례대로 덧셈(+)의 개수, 뺄셈(-)의 개수, www.acmicpc.net 문제풀이 👨🏻‍💻 핵심 스킬 👨🏻‍💻 브루트포스 연산자를 끼워 넣는 문제는 브루트포스로 해결하였다. 연산자의 개수는 숫자 배열의 크기 -1 이므로 최대 10개이다. 10개를 순서를 고려하여 나열하는 방법은 최대 10!이므로 시간초과 없이 해결할 수 있다. 따라서, 만들수 있는 모든 연산자의 경우의수를 만들어준 뒤 계산해 주면 쉽게 해..

    JPA 영속성 컨텍스트란?

    JPA 영속성 컨텍스트란?

    도입 지난 포스팅에선 JPA를 활용하여 데이터를 저장하고 삭제하고 변경하는 작업을 해보았다. JPA를 사용하여 CRUD를 진행할 때 어떠한 원리로 동작을 하게 되는지 굉장히 많이 궁금하였다. 이번 포스팅에서는 JPA의 작동원리인 영속성 컨텍스트에 대하여 알아보려고 한다. 영속성 컨텍스트? 영속성 컨텍스트란 엔티티를 영구히 저장하는 환경으로 JPA의 저장공간이라고 생각하면 된다. 객체를 생성하고 JPA를 활용하여 DB에 넣어주게되면, 쿼리로 바로 DB에 넣어주는 것이 아니라 영속성 컨텍스트라는 공간에 따로 저장을 해두는 것이다. 해당 트렌잭션이 끝날 때(commit) 그 동안 모아둔 쿼리를 DB에 쏴주게 된다. 여기서 중요한 것은 영속성 컨텍스트는 당연히 하나의 트렌젝션에서만 공유가 된다. 언제 영속성 컨..

    [카카오] 카카오 프렌즈 컬러링북 (java)

    [카카오] 카카오 프렌즈 컬러링북 (java)

    문제링크 https://programmers.co.kr/learn/courses/30/lessons/1829 코딩테스트 연습 - 카카오프렌즈 컬러링북 6 4 [[1, 1, 1, 0], [1, 2, 2, 0], [1, 0, 0, 1], [0, 0, 0, 1], [0, 0, 0, 3], [0, 0, 0, 3]] [4, 5] programmers.co.kr 문제풀이 👨🏻‍💻 핵심 스킬 👨🏻‍💻 브루트 포스 문제에서는 영역의 개수와, 영역의 최대값을 물어보고 있다. 영역은 색칠을 해야하는 부분의 상하좌우 중 연결된 동일한 색상이어야 하며 0의 경우색칠을 하지 않는다. 따라서 나는 체크하는 배열을 만들어, 체크가 안된 부분 중 0이 아닌 부분을 체크하며 영역을 구분지었다. $n*m$크기의 배열을 모두 돌면서 아직..

    [BOJ_16931] 겉넓이 구하기 (java)

    [BOJ_16931] 겉넓이 구하기 (java)

    문제링크 https://www.acmicpc.net/problem/16931 16931번: 겉넓이 구하기 크기가 N×M인 종이가 있고, 종이는 1×1크기의 칸으로 나누어져 있다. 이 종이의 각 칸 위에 1×1×1 크기의 정육면체를 놓아 3차원 도형을 만들었다. 종이의 각 칸에 놓인 정육면체의 개수가 주어 www.acmicpc.net 문제풀이 👨🏻‍💻 핵심 스킬 👨🏻‍💻 시뮬레이션, 구현 겉넓이를 모두 구해주는 문제이다. 윗면과 아랫면 그리고 옆면으로 나누어 구현을 해주면 된다. 윗면과 아랫면 윗면과 아랫면의 겉넓이를 구하는 방법은 매우 간단하다. 조건에서 주어진 $n*m$에 블럭이 1개 이상 들어가야하므로 항상 넓이는 $n*m$이 된다. 옆면 옆면의 넓이를 구하는 방법은 4방면으로 붙어있는 도형을 확인하..

    [BOJ_2290] LCD Test (java)

    [BOJ_2290] LCD Test (java)

    문제링크 https://www.acmicpc.net/problem/2290 2290번: LCD Test 첫째 줄에 두 개의 정수 s와 n이 들어온다. (1 ≤ s ≤ 10, 0 ≤ n ≤ 9,999,999,999)이다. n은 LCD 모니터에 나타내야 할 수 이며, s는 크기이다. www.acmicpc.net 문제풀이 👨🏻‍💻 핵심 스킬 👨🏻‍💻 시뮬레이션 LCD Test 문제는 세그먼트로 생각하고 특정지점을 인덱싱하여 풀어주었다. 숫자를 표현해주어야하는 크기는 모두 동일하기 때문에 7-Segment와 동일하게 생각하여 해결해줄 수 있다. index를 잘 판단하여 A,B,C,D,E,F,G의 위치를 잡고 정해진 크기만큼 값을 넣어주기만 하면 된다. 그리고나서 0부터 9까지 각각 어느 지점의 세그먼트가 켜져야..

    JPA로 CRUD하기

    JPA로 CRUD하기

    도입 지난 시간에 JPA 프로젝트를 설정하는 방법에 대하여 알아보았습니다. 이번시간에는 JPA로 CRUD를 하는 것을 알아보도록 하겠습니다. CRUD는 Create, Read, Update, Delete의 약자로 생성, 읽기, 갱신, 삭제를 의미합니다. 이번 포스팅에서는 DB에 데이터를 넣고, 조회하고, 수정하고, 삭제하는 방법을 알아보도록 하겠습니다. 시작 전에 JPA? 객체지향적인 언어와 RDB는 구현할 때 굉장히 모순적인 부분이 많습니다. 객체들이 협력하며 만들어낸 결과물들을 DB에 저장을 할 때는 객체가 아닌 테이블에 저장이 되기 때문에 테이블로 각각 데이터를 넣어주어야하는 번거로움이 있습니다. 이로써 객체지향적으로 프로그램을 개발하여도 RDB와 연동시켜주는 과정에서 굉장히 적은 생산성을 보여주었..