본문 바로가기
  • Code Smell

!101

[Codility] CyclicRotation (Java) 문제 An array A consisting of N integers is given. Rotation of the array means that each element is shifted right by one index, and the last element of the array is moved to the first place. For example, the rotation of array A = [3, 8, 9, 7, 6] is [6, 3, 8, 9, 7] (elements are shifted right by one index and 6 is moved to the first place). The goal is to rotate array A K times; that is, each eleme.. 2021. 3. 24.
[Programmers] 체육복 (Java) 문제 점심시간에 도둑이 들어, 일부 학생이 체육복을 도난당했습니다. 다행히 여벌 체육복이 있는 학생이 이들에게 체육복을 빌려주려 합니다. 학생들의 번호는 체격 순으로 매겨져 있어, 바로 앞번호의 학생이나 바로 뒷번호의 학생에게만 체육복을 빌려줄 수 있습니다. 예를 들어, 4번 학생은 3번 학생이나 5번 학생에게만 체육복을 빌려줄 수 있습니다. 체육복이 없으면 수업을 들을 수 없기 때문에 체육복을 적절히 빌려 최대한 많은 학생이 체육수업을 들어야 합니다. 전체 학생의 수 n, 체육복을 도난당한 학생들의 번호가 담긴 배열 lost, 여벌의 체육복을 가져온 학생들의 번호가 담긴 배열 reserve가 매개변수로 주어질 때, 체육수업을 들을 수 있는 학생의 최댓값을 return 하도록 solution 함수를 작성.. 2021. 3. 23.
[Codility] BinaryGap (Java) 문제 A binary gap within a positive integer N is any maximal sequence of consecutive zeros that is surrounded by ones at both ends in the binary representation of N. For example, number 9 has binary representation 1001 and contains a binary gap of length 2. The number 529 has binary representation 1000010001 and contains two binary gaps: one of length 4 and one of length 3. The number 20 has binar.. 2021. 3. 23.
[JUnit] JUnit5 사용법과 TDD (1) JUnit5 사용법과 TDD (1) 설명 JUnit은 자바의 단위 테스트 프레임워크이다. xUnit에서 파생되어 각 언어별 Unit 프레임워크가 존재한다. C : CUnit C++ : cppUnit Python : pyUnit Java : JUnit 현재 JUnit은 2021년 3월 기준 5버전까지 나온 상태이다. 공식사이트 프로젝트에 추가하기 spring boot 환경(intelliJ, Gradle)에서 추가하였다. JUnit은 spring-boot-starter-test에 기본적으로 포함 되어있다. build.gradle에 spring-boot-starter-test 패키지를 추가하고, 아래 useJUnitPlatform 을 테스트 영역에 작성한다. dependencies { ... implement.. 2021. 3. 19.
[Java] HeapDump 파일 만들기 HeapDump 파일 만들기 Github API 등 web application, 또는 daemon 형태의 java background application 서비스를 하다보면, OutOfMemoryException이 발생하는 경우가 있다. 또한 메모리가 튈 일이 없는 상황인데도 점차 주기적으로 Heap 점유율이 늘어난다던지 하는 경우가 있는데 이런 경우 HeapDump 파일을 만들어 분석하게 되면, 어느 객체가 메모리를 많이 차지하는지, 현재 참조가 끊어진 객체들은 어떤 것들이 있는지에 대해 분석 할 수 있다. spring 프로젝트의 경우 actuator 모듈을 도입하게 되면, HeapDump 파일을 내려 받을 수 있는데, 사실 힙덤프 하나만을 위해서 actuator 도입을 해야하는 부담스러운 상황이거나.. 2021. 3. 17.
[SPRING] 스프링 캐시 사용하기 spring에서 cache 관련 된 기능을 지원한다. 기존 cache 처리라고 하면, Redis, memcached 등의 추가적인 memoryDB를 이용하거나, application 레벨에서 사용 가능한 EhCache 등이 많이 쓰이는데, 이 중 application 레벨에서 사용 가능한 spring cache에 대한 소개이다. spring cache는 cache 기능의 추상화를 지원하는데, EhCache, Couchbase, Redis 등의 추가적인 캐시 저장소와 빠르게 연동하여 bean으로 설정 할 수 있도록 도와준다. 만일 추가적인 캐시 저장소와 연결하지 않는다면, ConcurrentHashMap 기반의 Map 저장소가 자동으로 추가된다. 캐시를 쓰긴 써야하는데, EhCache까지는 쓸 필요는 없고.. 2021. 3. 11.
[LeetCode] Climbing Stairs 문제 (memoization) Climbing Stairs 문제 (memoization) 문제 링크 : https://leetcode.com/problems/climbing-stairs/ 문제의 풀이 방법은 전형적인 피보나치 수열의 합 문제였는데, 이상하게 피보나치 풀이법인 recursive 방법으로 풀면 Time Limit Exceeded 실패가 발생했다. 실행 때 마다 시간이 좀 다르니 혹시 운이 없어서 그런가 했는데, 3번을 돌려도 똑같이 실패했다. 그래서 멤버변수로 Map을 하나 만들고, 이미 지나온 값은 메모리에 들고 있는 방식(memoization)으로 문제를 풀었다. 예를들어 피보나치 수열은 아래랑 같은 공식이 성립하는데 f(n) = f(n-1) + f(n-2) f(5) = f(4) + f(3) 과 같고 f(4) = f(.. 2021. 2. 10.
[JAVA] Java Object List 중복제거 Java Object List 중복제거 Github 소스 Java8 이상의 Collections에는 Stream API 사용 시 distinct라는 중복 제거 메소드가 있다. Stream API의 distinct 메소드는 Object 의 equals 로 비교하므로 객체 자체가 같은지를 비교한다. 따라서 리터럴 형태의 String을 인자로 갖는 List등은 비교가 가능한데, Dto 형태의 모델은 비교가 안되며 Object 자체도 같은 주소값을 가지는 경우에는 가능한데 안의 속성을 비교해야 하는 경우 비교가 어렵다. 이런 경우 사용 할 수 있는 Utils 클래스이다. 아래 학생 정보를 담는 클래스가 있다고 하자 Dto Class 예 @Data public class StudentInfo { private l.. 2021. 1. 4.
[Git] Push Author 변경하기 Git Push Author 변경하기 IntelliJ 등 IDE 에서 여러 Git 호스팅 서버 (깃랩, 비트버킷 )등 을 이용하다보면 기존 프로젝트를 가져왔을 때 login user가 다른 호스팅 서버 아이디로 되어 있는 등 commit author가 잘못 되어 있는 경우가 있다. 그럴 때 이미 서버로 push 해 버린 author를 변경하는 방법이다. git commit author 보기 & 바꾸기 git은 global user와 해당 프로젝트의 user를 따로 지정 할 수 있다. 따라서 현재 다른 계정으로 커밋자가 되어 있다면 아래 명령어로 확인한다. git config --list config 설정에서 user.name 과 user.email 을 확인한다. 이후 name 과 email을 원하는 것으.. 2020. 12. 6.