전체 글 681

[PS] BOJ1874 스택 수열 ( 자료구조 ) with Python, JAVA

@문제 1874번: 스택 수열 1부터 n까지에 수에 대해 차례로 [push, push, push, push, pop, pop, push, push, pop, push, push, pop, pop, pop, pop, pop] 연산을 수행하면 수열 [4, 3, 6, 8, 7, 5, 2, 1]을 얻을 수 있다. www.acmicpc.net @문제풀이 STACK의 구조를 이해하는 문제이다. 두 가지 포인터가 필요하다. current : STACK에 PUSH 되었던 가장 큰 수 top : STACK에서 가장 먼저 POP되는 값 STACK에 오름차순으로 PUSH 되므로 입력값이 current보다 커야 PUSH를 할 수 있다. POP은 입력값과 top이 같아야 한다. 만약 top과 입력값이 다르면 STACK으로 구현..

문제풀이 2023.06.05

[JPA] 연관관계 매핑 - 다대일 ( @ManyToOne )

JPA는 객체지향설계와 관계형DB의 패러다임 불일치를 해결하는 프레임워크이다. 객체지향설계의 가장 대표적인 특성이 '연관관계'이다. 객체는 주소를 참조하여 다른 객체에 접근할 수 있다. A객체 ➟ B객체 ➟ C객체 .. 주소에 주소를 타고 여러 객체에 연속으로 접근할 수 있다. 반면 관계형DB는 다르다. 관계형DB는 오로지 '외래키'로 JOIN 연산이 수행되어야 다른 테이블에 데이터를 가져올 수 있다. 객체지향만큼 데이터 접근이 자유롭지 못하다. 연관관계와 외래키JOIN방식의 간극은 JPA에 의해 해결된다. 개발자는 JPA가 처리할 수 있도록 어노테이션으로 '표시'만 남기면 된다. 그럼 개발자는 어떤 어노테이션을 남겨야 할까? 다대일 관계 [ N : 1 ] ( @ManyToOne ) 가장 많이 사용되는 ..

Dev/JPA 2023.06.02

[JPA] 엔티티 매핑 - @Temporal, @Enumerated, @Lob, @Transient

[JPA] 엔티티 매핑 - @Entity, @Table, @Column 엔티티매니저에 의해 생성된 엔티티는 DB의 테이블과 매핑된다. 매핑 작업은 JPA프레임워크가 담당한다. 개발자가 해야할 일은 어떤 엔티티가 어떤 테이블과 매핑되어야 하는지, 어떤 필드가 기 lordofkangs.tistory.com 이전 포스팅에서 기본적인 엔티티 매핑 어노테이션을 알아보았다. 이번 포스팅에서는 다양한 어노테이션을 정리해보겠다. @Temporal @Target({ElementType.METHOD, ElementType.FIELD}) @Retention(RetentionPolicy.RUNTIME) public @interface Temporal { TemporalType value(); } @Temporal은 Tempo..

Dev/JPA 2023.06.02

[CodingTest] 커리큘럼 ( graph )

◎ 문제 철수는 온라인으로 컴퓨터공학강의를 듣고 있다. 이때 각 온라인강의는 선수강의가 있을 수 있는데, 선수 강의가 있는 강의는 선수 강의를 먼저 들어야만 해당강의를 들을 수 있다. 예를들어 '알고리즘’ 강의의 선수 강의로 '자료구조'가 존재한다면, ‘자료구조를 들은 이후에 ‘알고리즘' 강의를 들을 수 있다. 철수는 총 N개의 강의를 듣고자 한다. 모든 강의는 1번부터 N번까지의 번호를 가진다. 또한 동시에 여러 개의 강의를 들을 수 있다고 가정한다. 예를 들어 N=3일 때, 3번강의의 선수 강의로 1번과 2번강의가 있고, 1번과 2번강의는 선수강의가 없다고 가정하자. 그리고 각 강의에 대하여 강의 시간이 다음과 같다고 가정하자. 1번 강의: 30시간 2번 강의: 20시간 3번 강의: 40시간 이 경우..

문제풀이 2023.06.02

[MODERN JAVA] 람다 캡처링 ( Lambda Capturing )

람다 캡처링( Lambda Capturing )을 알아보기 전에, 간단히 JVM의 메모리 구성을 알아보자. JVM은 STACK, HEAP, METHOD 영역으로 메모리 영역이 나뉜다. HEAP 영역은 동적으로 생성된 객체가 저장된다. STACK 영역은 실행된 스레드가 스택 구조로 쌓인다. 이때 스레드는 Heap 영역의 객체에 접근하여 메소드 영역에 저장된 메소드를 실행하는데, 실행된 메소드는 '프레임' 단위로 다시 STACK 영역에 쌓인다. 그럼 위 개념을 숙지하고 람다 캡처링에 대해서 하나씩 알아보자. 이해하기 쉽도록 예를 들어보겠다. 농부가 있다. 농부는 과수원을 운영하는데, 수확한 사과 중 상품성있는 사과를 분류하려고 한다. 농부는 사과분류머신을 사용하였고 사과분류머신은 '무게'로 상품성있는 사과를..

Dev/JAVA 2023.06.02

[MODERN JAVA] 컴파일러가 보는 람다(Lambda)

람다는 파라미터로 코드를 넘기는 기술이다. 사과를 분류하는 메소드가 있다. 메소드는 사과를 분류하는 로직을 갖는데, 로직은 정부정책에 따라 매번 바뀐다고 가정하자. 매번 바뀌는 로직 때문에 메소드를 매번 수정하기는 번거로우니 분류 로직만 변경하고 싶다. 이때, 로직을 간편하게 넘길 수 있는 기술이 '람다'이다. 파라미터로 '로직'만 넘겨받으면 메소드는 어떤 수정도 할 필요가 없다. 정책에 따라 파라미터로 넘겨받는 로직만 달리하면 되기 때문이다. 그러나 파라미터도 일종의 '변수'로 원시타입이나 참조타입만 들어갈 수 있다. '코드'가 들어갈 수 없다. 그래서 JAVA는 함수형 인터페이스를 사용한다. 함수형 인터페이스란, 메소드가 하나밖에 없는 인터페이스이다. 하나밖에 없는 메소드는 '함수'이다. 람다는 함수..

Dev/JAVA 2023.06.01

[CodingTest] 도시분할계획 ( graph )

◎ 문제 동물원에서 막 탈출한 원숭이 한 마리가 세상 구경을 하고 있다. 어느 날 원숭이는 '평화로운 마을'에 잠시 머물렀는데 마침 마을 사람들은 도로 공사 문제로 머리를 맞대고 회의 중이었다. 마을은 N개의 집과 그 집들을 연결하는 M개의 길로 이루어져 있다. 길은 어느 방향으로든지 다닐 수 있는 편리한 길이다. 그리고 길마다 길을 유지하는데 드는 유지비가 있다. 마을의 이장은 마을을 2개의 분리된 마을로 분할할 계획을 세우고 있다. 마을이 너무 커서 혼자서는 관리할 수 없기 때문이다. 마을을 분할할 때는 각 분리된 마을 안에 집들이 서로 연결되도록 분할해야 한다. 각 분리된 마을 안에 있는 임의의 두 집 사이에 경로가 항상 존재해야 한다는 뜻이다. 마을에는 집이 하나 이상 있어야 한다. 그렇게 마을의..

문제풀이 2023.06.01

[CodingTest] 전보 ( 최단거리 )

◎ 문제 어떤 나라에는 N개의 도시가 있다. 그리고 각 도시는 보내고자 하는 메시지가 있는 경우, 다른 도시로 전보를 보내서 다른 도시로 해당 메시지를 전송할 수 있다. 하지만 X라는 도시에서 Y라는 도시로 전보를 보내고자 한다면, 도시 X에서 Y로 향하는 통로가 설치되어 있어야 한다. 예를 들어 X에서 Y로 향하는 통로는 있지만, Y에서 X로 향하는 통로가 없다면 Y는 X로 메시지를 보낼 수 없다. 또한 통로를 거쳐 메시지를 보낼 때는 일정 시간이 소요된다. 어느 날 C라는 도시에서 위급 상황이 발생했다. 그래서 최대한 많은 도시로 메시지를 보내고자 한다. 메시지는 도시 C에서 출발하여 각 도시 사이에 설치된 통로를 거쳐, 최대한 많이 퍼져나갈 것이다. 각 도시의 번호와 통로가 설치되어 있는 정보가 주..

문제풀이 2023.06.01

[JPA] 엔티티 매핑 - 기본 키 생성전략 ( IDENTITY, SEQUENCE )

JPA는 어노테이션으로 엔티티와 테이블을 매핑한다. [JPA] 엔티티 매핑 - @Entity, @Table, @Column 엔티티매니저에 의해 생성된 엔티티는 DB의 테이블과 매핑된다. 매핑 작업은 JPA프레임워크가 담당한다. 개발자가 해야할 일은 어떤 엔티티가 어떤 테이블과 매핑되어야 하는지, 어떤 필드가 기 lordofkangs.tistory.com 테이블에서 가장 중요한 개념 중 하나가 '기본 키' 이다. 개발자는 기본 키 정보를 엔티티에 어노테이션으로 '표시'하여 JPA에게 전달해야 한다. JPA는 표시된 어노테이션을 바탕으로 테이블과 엔티티를 매핑한다. @Id @Target({ElementType.METHOD, ElementType.FIELD}) @Retention(RetentionPolicy...

Dev/JPA 2023.05.31

[JPA] 엔티티 매핑 - @Entity, @Table, @Column

엔티티매니저에 의해 생성된 엔티티는 DB의 테이블과 매핑된다. 매핑 작업은 JPA프레임워크가 담당한다. 개발자가 해야할 일은 어떤 엔티티가 어떤 테이블과 매핑되어야 하는지, 어떤 필드가 기본키인지, 어떤 필드가 어떤 컬럼과 매핑되어야 하는지를 '표시' 하는 작업이다. '표시'는 '어노테이션'으로 이루어진다. [JAVA] 어노테이션( Annotation )이란? 어노테이션(Annotation)은 무엇일까? 어노테이션은 '주석'이다. JVM이 읽는 주석이다. 주석이 필요한 이유가 무엇일까? 철학책과 과학책이 있다. 과학책은 과학코너로 철학책은 철학코너로 분류하고 lordofkangs.tistory.com 어노테이션에 대한 자세한 내용은 위 포스팅을 참고 바란다. 이번 포스팅에서는 매핑작업에 사용되는 가장 기..

Dev/JPA 2023.05.31