스터디/알고리즘

[Programmers] 체육복

본 게시글은 PC 환경에서 보기 편하도록 설정이 되어 있습니다. 체육복 탐욕법(Greedy)으로 분류 되어 있는 문제입니다. 학생들의 체육복 보유 여부와 빌려줄 수 있는지를 빠르게 계산하는 것이 문제의 핵심이었던 것 같습니다. 저는 이를 int[] studentStatus 를 이용하여 -1, 0, 1로 각각 나타내었습니다. 풀이 스타일 Java와 같은 객체지향 언어를 이용하여 알고리즘을 푼다면 객체지향스럽게 알고리즘을 풀어야 한다고 생각합니다. 단순한 알고리즘 풀이는 가독성은 당연히 떨어지고, Java를 쓰는 이유가 퇴색되는 것 같습니다. 따라서, Java를 이용해서 문제를 푸신다면 객체가 해야할 행동으로 문제를 풀 수 있도록 하시는 것을 추천드립니다. Student 객체는 체육복을 빌려야하는지 알려주어..

2019.10.01 게시됨

스터디/알고리즘

[Programmers] 베스트 앨범

본 게시글은 PC 환경에서 보기 편하도록 설정이 되어 있습니다. 베스트 앨범 해시로 분류되어 있는 문제 입니다. 주어진 조건에 따라 compare를 할 수 있도록 @Override 된 compareTo 를 잘 구현하는 것이 관건인 문제입니다. 풀이 스타일 Java와 같은 객체지향 언어를 이용하여 알고리즘을 푼다면 객체지향스럽게 알고리즘을 풀어야 한다고 생각합니다. 단순한 알고리즘 풀이는 가독성은 당연히 떨어지고, Java를 쓰는 이유가 퇴색되는 것 같습니다. 따라서, Java를 이용해서 문제를 푸신다면 객체가 해야할 행동으로 문제를 풀 수 있도록 하시는 것을 추천드립니다. Album 객체와 Album 객체를 List로 들고있는 AlbumBundle 객채를 이용하여 문제를 풀었습니다. 문제를 풀때 조금 더..

2019.09.29 게시됨

스터디/알고리즘

[Programmers] 가장 먼 노드

가장 먼 노드 그래프 문제입니다. 추가적으로 경로 탐색을 위해 BFS로 접근해야 하는 문제였습니다. 문제를 풀때 눈여겨 봐야할 조건이 딱히 있지 않은 문제였습니다. 다만 탐색을 할때 DFS가 아닌 BFS로 접근해야합니다. 저는 처음에 아무생각 없이 DFS로 접근했다가 연산양이 늘어나서 시간초과가 발생했습니다. 사실 문제를 처음에 잘 보셨다면 BFS로 풀어야 한다는 느낌이 들으실것 같습니다! 풀이 스타일 Java는 객체지향 언어이기 때문에 알고리즘 문제를 자바로 풀때 객체를 활용하는 방식으로 풀어야 하고, 이러한 방식은 복잡한 알고리즘 코드일 지라도 다른사람이 코드를 읽기 쉬워지게 만들어주는 것 같습니다. Node 객체를 정의해놓고 간선이 존재하는 Node를 List linkedNodes 를 가지고 있도록..

2019.09.29 게시됨

스터디/알고리즘

[Programmers] 여행경로

본 게시글은 PC 환경에서 보기 편하도록 설정이 되어 있습니다. 여행경로 BFS-DFS 문제로 분류가 되어있는 문제입니다. 저는 DFS로 문제를 풀었습니다. 문제의 조건중 눈여겨 봐야할 조건은 1. 주어진 항공권은 모두 사용해야 합니다. 2. 만일 가능한 경로가 2개 이상일 경우 알파벳 순서가 앞서는 경로를 return 합니다. 3. 모든 도시를 방문할 수 없는 경우는 주어지지 않습니다. 인데, 2번의 조건만 만족시키는 방식으로하면 완전한 탐색이 이루어지지 않는 경우가 발생하여 채점시 1번과 2번을 실패할 수 있습니다. 따라서 이 문제는 2번에 맞춰 정해진 경로들의 우선순위를 완전 탐색해야 함을 빠르게 잡아내는것이 중요한 문제였습니다. 풀이 스타일 Java는 객체지향 언어이기 때문에 알고리즘 문제를 자바..

2019.09.27 게시됨

스터디/JPA

[JPA] nullable = false와 @NotNull의 차이점

지금 보시는 이글은 정확하지 않습니다. 곧 수정예정입니다. nullable = false vs. @NotNull 친구들과 스프링 부트를 공부하던 도중 한 친구가 내 코드를 보고 저번에는 @NotNull을 쓰던데 이번에는 nullable = false를 쓴 이유가 무엇이냐고 물어봤다. 둘다 내가 원하는 대로 동작한다고 생각만했다. 와,, 깊이 생각해 본적이 없었다! 그래서 바로 찾아봤다! nullable = false 관련 레퍼런스에서 설명을 보려했는데 JPA레퍼런스가 다 영어라서 어디로 가야할지 모르겠다.. 그래서 코드에서 정의되어있는 부분을 확인해 보았다. /** * (Optional) Whether the database column is nullable. */ boolean nullable() de..

2019.05.06 게시됨

스터디/JPA

[이론] 영속성 컨텍스트

영속성 컨텍스트? JPA를 다루기전에 영속성 컨텍스트에 대한 이해가 필요하다! 그리고 영속성 컨텍스트를 이해하기 위해 엔티티 매니저에 대한 이해가 필요하다! 엔티티 매니저 엔티티 매니저는 엔티티 매니저 팩토리에서 생성된다. 엔티티 매니저 팩토리는 애플리케이션 전체에서 딱 한 번만 생성되고 공유되는데 그 이유는 팩토리의 생성비용이 크기 때문이다. 이러한 팩토리는 여러 명이 동시에 접근을 해도 무방하다! 엔티티 매니저는 당연히 위에서 언급한 팩토리에서 생성된다. JPA의 기능 대부분을 엔티티 매니저가 제공해준다. 즉, 엔티티 매니저가 데이터베이스의 CRUD작업을 제공한다. 이러한 엔티티 매니저는 팩토리와 달리 여러 명이 하나의 엔티티 매니저에 동시접근을 해선 안된다. 여러 명이 접근하면 동시성 문제가 발생한..

2019.03.29 게시됨

스터디/데이터베이스

[이론] InnoDB와 MyISAM의 차이점

InnoDB? MyISAM? 데이터베이스 엔진이라 함은 CRUD작업을 도와주는 친구들인데항상 MySQL을 다룰때 엔진 설정은 디폴트로 InnoDB가 되어있다.사실 이유가 별로 궁금하지 않았다...그런데 알아야된다는 말을 듣기도 했고, 생각해 보니 내가 쓰는게 뭔지는 알아야 하지 않겠나 싶어 찾아보았다. MyISAM??MyISAM은 MySQL 관계형 데이터베이스 관리시스템 5.5 버전 이전의 기본 스토리지 엔진이다. 이것은 옛 ISAM 코드를 기반으로 했지만, 더 많은 유용한 확장성 가지고 있었다. MyISAM의 가장 부족한 점은 트랜잭션의 지원 부재였다. MySQL 5.5과 이후 판은 참조 무결성 제한과 더 높은 동시성을 보장하기 위해 InnoDB 엔진으로 전환되었다.위키 백과진짜 뭔지도 모르고 엔진 선..

2019.03.29 게시됨