분류 전체보기
-
코루틴에서 java 패키지의 ReentrantLock 의 문제점개발 흉내 2024. 7. 6. 14:31
@Serviceclass ProductService { companion object { val lock = ReentrantLock() // are you sure? } suspend fun task() { lock.lock() try { // ... do task // ... do task // ... do task } finally { lock.unlock() } }}동료의 코드를 리뷰하던 중 ReentrantLock 을 사용하는 코드를 보았다. ReentrantLock 는 코루틴 작업들의 동시 접근을 제어하고 있었는데, Reentrant..
-
파이썬의 range는 게으른 연산(lazy evaluation)이다.개발 흉내 2022. 2. 21. 17:56
range 는 항상 같은 메모리를 차지한다. range 는 lazy evaluation 이기 때문에 범위가 커진다고 메모리가 커지진 않는다. >>> from sys import getsizeof >>> getsizeof(range(1_000_000_000_000_000)) 48정수값을 천조개를 미리 연산해서 갖고 있으려면 메모리가 적어도 1PB 는 있어야하지만 lazy 하게 연산하기 때문에 항상 일정한 메모리를 차지하게 된다. 1_000_000_000_000_000 in range(1_000_000_000_000_001) 는 빠르다. range 에 포함되어있는지를 계산하는 in 연산은 매우 빠르다. >>> from timeit import timeit >>> expr = """ ... 1_000_000_..
-
[백준] 14502. 연구소알고리즘/백준 2021. 4. 5. 01:56
문제 출처 https://www.acmicpc.net/problem/14502 문제 설명 2차원 좌표계에 벽과 바이러스가 있다. 바이러스는 확산되지만 벽은 통과할 수 없다. 3개의 벽을 더 세워서 바이러스를 최대한 억제해라. 문제 풀이 지도가 최대 8x8로 아담하다. 3개의 벽을 세울 수 있는 모든 경우의 수를 도전해봐도 충분할 것이다. 3개의 벽을 세웠다면 바이러스를 확산시키고 안전 구역을 센다. 안전 구역의 최댓값을 출력한다. 왜 모든 경우의 수를 도전해봐도 충분한가? 최악의 경우 8x8에 3개의 벽을 세울 수 있는 경우의 수는 64C3 = 41,664 이고 8x8의 지도를 41,664번 순회한다면 2,666,496회의 연산이 필요하다. 이런 식의 어림짐작으로 1억을 넘지않는다면 백준의 1초를 통과할..
-
[백준] 4963. 섬의 개수알고리즘/백준 2021. 4. 4. 23:02
문제 출처 https://www.acmicpc.net/problem/4963 문제 설명 바다와 땅이 있다. 인접한 땅들은 한 개의 섬이다. 섬의 개수를 세어라. 문제 풀이 완전 탐색으로 땅을 찾는다. 땅을 찾으면 인접한 모든 땅을 너비 우선 탐색으로 방문 표시한다. 땅을 찾은 횟수가 섬의 개수가 된다. 코드 코드 해설 public static void main(String[] args) throws IOException { readInput(); while (!(R == 0 && C == 0)) { int answer = getIslandCount(); System.out.println(answer); readInput(); } } 항상 메인문은 심플하게. 1. 입력을 받는다. 2. 계산한다. 3. 출력..
-
개수를 뜻하는 변수는 어떻게 지어야할까? count? number?개발 흉내 2021. 3. 31. 11:04
객체가 있고 그 객체를 세어서 저장해야할 때가 있다. 보통 countOfItem 을 많이 사용했는데 오늘 JPA의 응답을 보니 numberOfElements 라는 속성이 보여서 당황스러웠다. cntOfItem 이나 numOfItem 같은 보편적인 줄임말도 지양하라는 글을 어디선가 봤는데 또 다른 고민이 생겼다. 개수를 표현하는 말로써 count와 number 중에 어떤게 더 타당할까? https://stackoverflow.com/questions/6358588/how-to-name-a-variable-numitems-or-itemcount How to name a variable: numItems or itemCount? What is the right way to name a variable int ..
-
[백준] 7562. 나이트의 이동알고리즘/백준 2021. 3. 31. 01:55
문제 출처 https://www.acmicpc.net/problem/7562 문제 설명 나이트는 체스 말의 나이트처럼 움직인다. 2차원 좌표계에서 탐색하는 문제다. 문제 풀이 bfs로 해결한다. 코드 코드 해설 public static void main(String[] args) { readInput(); for (int tc = 0; tc < testCase; tc++) { int answer = bfs(tc); System.out.println(answer); } } readInput()에서 모든 입력을 받는다. 테스트케이스만큼 bfs를 연산하고 결과를 출력한다. Queue queue = new LinkedList(); queue.offer(knight[tc]); while (!queue.isEmpt..
-
[백준] 1657. 숨바꼭질알고리즘/백준 2021. 3. 30. 22:59
문제 출처 www.acmicpc.net/problem/1697 문제 설명 1차원 좌표계에서 경로를 탐색하는 문제다. 문제 풀이 bfs로 풀었다. 현재 있는 점에서 갈 수 있는 모든 방향을 큐에 넣는다. 큐에 목적지가 있다면 결과를 출력하고 종료한다. 코드 코드 해설 public static void main(String[] args) { readInput(); int answer = bfs(); System.out.println(answer); } 메인은 항상 직관적으로 구성한다. 1. 입력을 받는다. 2. 연산한다. 3. 결과를 출력한다. public static int move(int x, int method) { switch(method) { case 0: return x - 1; case 1: r..
-
[자바스크립트] presignedUrl 다운로드개발 흉내 2021. 3. 30. 18:52
how to download s3 presignedUrl in javascript 최신 브라우저는 다음 코드로 충분하다. // download in modern browser function download (url) { const link = document.createElement('a'); link.href = url; link.click(); } a 태그를 생성하고 url를 잡아준 뒤 클릭한 것같은 효과를 낸다. 클릭에서 다운로드가 시작될 것이다. 근데 IE에서는 아무런 반응이 없다. DOM에서 로딩되지않으면 실체가 없다고 판단하는 모양이다. DOM에 추가한 뒤 바로 토끼자. // download in IE function download (url) { const link = document.cr..