노드가 최대 4000개, 간선이 최대 4000개라는 제한이 들어온다. 여기서 3개의 노드를 선택한다. 이때 이 3개의 노드는 서로 인접한 상태여야 한다. 각 노드를 A, B, C라고 할때 A, B, C가 인접한 모든 노드의 개수 - 6의 최솟값을 구하라고 한다. 이때 노드는 중복해서 세야 한다. 4000 C 3을 하기에는 제한이 조금 빡세기에 더 쉬운 방법을 생각해봐야 한다. 우선 각 노드별로 자신이 인접한 노드의 개수를 구하는 것은 어렵지 않다. 이 값을 활용해보자. A, B, C를 동시에 선정하기에는 아무리 생각해도 너무 빡빡하니, A만 먼저 구해보자. 그러면 A와 인접한 노드들 중에 B, C가 모두 존재해야 한다. 자 그럼 B를 하나 뽑아보자. C를 선정하기 위해서는 자신과 인접하고, A와 인접한 ..
처음에 문제를 잘못이해해서 맞왜틀을 했다. 구하고 싶은 값을 아주 간단하게 정의하면 초기의 잔디 상태가 주어졌을때, 결과로 주어진 잔디 상태를 만들 수 있는가?를 묻고 있다. 처음 주어지는 잔디를 graph, 최후의 잔디를 result라고 일단 정의를 했다. 만약 graph에서 O인데 result에서 X인 상태가 주어진다면 절대 만들 수 없다. 나는 이 부분을 놓쳤고 O를 전부 채우기만 하면 된다고 문제를 접근해 자꾸 틀렸다. 이 부분을 고려했다면 이제 result 잔디를 만들 수 있는지 확인해야 한다. 나는 BFS와 DFS를 적절히 섞어 문제를 해결했다. 먼저 초기 잔디를 기준으로 BFS를 돌릴것이다. 근데, 최대 D만큼 이동해 잔디를 채울 수 있다. 이때 지나간길을 전부 잔디로 채우지 않아도 된다. ..
여러 가지 자료구조를 사용해야 하는 문제이다. 먼저 제한을 자세히 살펴보고 문제를 해석해 보자. 지하철 노선의 개수는 10개뿐이다. 그리고 이 노선에 속하는 역이 입력으로 들어온다. 이때 역의 값은 최대 2^32-1까지 가능하다. 반면 역의 개수는 최대 10*10이 될 수 있다. 각 역에 도착하기 위한 최소 비용을 배열로 나타내기 위해서는 역을 압축해야 한다는 것을 알 수 있다. 따라서 0 ~ 2^32-1의 범위에 속하는 역들을 0 ~ 100에 해당하는 값으로 치환하는 작업을 수행하자. 결국 구하고 싶은 것은 몇 번 지하철을 갈아타는지이다. 따라서 지하철을 기준으로 도달할 수 있는 역들에 전부 방문을 표시하고, 역에서 환승할 수 있다면 환승을 하면 된다. 이때 방문 값이 1 증가하게 되고 우리는 이 값의..
실제 서비스를 배포하고, 운영하면 문제가 생기기 마련이다. 이 문제를 사전에 막기 위해서는 테스트 코드가 큰 영향을 주는데 테스트 코드는 작성하기도 귀찮고 안일해지게 되는것 같다. 테스트 코드를 관리하지 않으면 어느새 코드 커버리지는 낮아지게 되고 코드 커버리지가 낮다는 것은 코드가 충분히 검증되지 못했다는 것을 의미한다. 이 문제를 어떻게 하면 개선할 수 있을까.. 코드 커버리지가 일정 수준보다 낮으면 배포가 되지 않도록 하면 되지 않을까?? 이 의문까지 도달했을때 이미 관련된 도구가 있다는 것을 알게 되었다. 그리고 이번 글의 주제인 JaCoCo가 그 주인공이다. JaCoCo는 Code Coverage를 측정하는 라이브러리이다. 테스트를 실행하고 그 결과를 html 파일이나 xml, csv를 통해 시..
[Redis] Redis Sentinel vs Cluster 이전에 나는 면접에서 'Redis를 캐시로 사용했을 때, Redis가 멈출 수도 있는데 어떻게 대처하겠는가?'에 대한 질문을 받은 적이 있었다. 이 질문은 장애 대처 능력에 대해 물어본 것인데, 지식이 부 jojaeng2.tistory.com Sentinel에 관련된 개념을 정리한 적이 있다. 이번에는 Redis Sentinel을 직접 사용해보기로 하자. HA를 제대로 적용하기 위해서는 Master와 Slave를 물리적으로 다른 호스트에 둬야 한다. 하지만 나는 돈이 없고, 2개의 VM을 돌리기에는 노트북 사양이 부족하므로, 하나의 호스트에서 포트만 바꿔서 구축할 예정이다. 동작 프로세스에 대해 먼저 살펴보자. 한대의 Master Node를 두..
이전에 나는 면접에서 'Redis를 캐시로 사용했을 때, Redis가 멈출 수도 있는데 어떻게 대처하겠는가?'에 대한 질문을 받은 적이 있었다. 이 질문은 장애 대처 능력에 대해 물어본 것인데, 지식이 부족해 죄송합니다를 연발했던 기억이 난다. 이 문제를 해결하려면 Redis의 HA를 구성하는 방법에 대해 알아야 한다. 간단하게 위와같이 서비스를 구축하게 된다면, Redis가 고장 났을 때 서비스에도 영향을 줄 수밖에 없다. 하지만, Redis를 여러 개 띄우고, 하나의 Redis처럼 사용할 수 있다면 문제를 해결할 수 있을 것이다. Redis의 HA(고가용성)을 구성하는 방법은 크게 Sentinel과 Cluster, 2가지가 존재한다. 이번에는 이 두 가지 방식을 비교하는 글을 작성해보려고 한다. Re..
다른 사람과 나의 코드 작성법은 다를 수밖에 없다. 그래서 다른 사람의 코드를 이해하는데 많은 시간을 사용하게 되고 생산성이 떨어지게 된다. 이를 위해 '코드 컨벤션'이라는 것이 존재하는데, 코드 컨벤션은 개개인이 신경을 써야만 만족시킬 수 있다. 그렇다면 코드 컨벤션을 강제적으로 지킬 수밖에 없도록 만들 수는 없을까? 이를 위해 checkstyle이라는 것이 존재한다. checkstyle을 프로젝트에 적용해 보고, 강제적으로 자바 컨벤션을 지키는 방법에 대해 알아보자. intellij의 plugins에 들어가서, checkstyle을 검색하고 설치하자. 설치 후, Checkstyle 설정을 할 수 있는데, default 값으로 2가지가 존재한다. Sun Checks Google Checks 위의 두가지..
프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 간단하게 생각해보면, 매우 쉬운 문제이다. N까지 도달하고 싶은데, 2배씩 건너뛸 수 있다고 한다. 그리고 1칸씩 이동할 수 있는데, 1칸씩 이동하는 횟수를 최소로 만들고자 한다. 뒤에서부터 생각해보자. N = 1000일때, 가장 이득인 방법은 N = 500에서 2배로 뛰는 방법일 것이다. 그리고 N = 250 에서 500으로 뛰고 ... 이러다 보면 N = 125에서 막히는데, 홀수이기 때문이다. 그래서 1칸 이동했다 치고, N = 124부터 보자. 이런식으로 N = 0이 될때까지 확인하면 된다. 간단하게 ..
- Total
- Today
- Yesterday
- ARP
- Operating System
- soft delete
- Database
- OS
- go
- algorithm
- mmu
- java
- effective
- fiber
- paging
- Effective Java
- 공지
- network
- cs
- spring
- GORM
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |