-
코루틴에서 java 패키지의 ReentrantLock 의 문제점개발 흉내 2024.07.06 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.02.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.04.05 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.04.04 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.03.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.03.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.03.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.03.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..
-
[릿코드] 1806. Minimum Number of Operations to Reinitialize a Permutationleetcode 2021.03.28 18:13
문제 출처 https://leetcode.com/contest/weekly-contest-234/problems/minimum-number-of-operations-to-reinitialize-a-permutation/ 문제 설명 짝수인 양의 정수 n이 주어진다. 크기가 n인 수열 perm은 perm[i] == i이라고 초기화한다. (단, 0-indexed. i는 0부터) 수열 perm에 대해 연산을 1회 실행하면 새로운 수열 arr은 각 i에 대해 다음과 같이 정의한다. i % 2 == 0라면, arr[i] = perm[i / 2]이다. i % 2 == 1라면, arr[i] = perm[n / 2 + (i - 1) / 2]이다. 처음의 perm에서 연산을 몇번 해야 다시 처음의 perm으로 돌아오는 지..
-
[릿코드] 1805. Number of Different Integers in a Stringleetcode 2021.03.28 14:33
문제 출처 https://leetcode.com/contest/weekly-contest-234/problems/number-of-different-integers-in-a-string/ 문제 설명 문자열이 하나 주어진다. 문자열 안에 있는 정수의 갯수를 구하여라. 중복되는 정수는 하나로 세어라. 문제 풀이 정규표현식으로 정수처럼 보이는 모든 부분 문자열을 구한다. 부분 문자열을 정수 형태로 변환하고 Set에 담는다. Set의 크기를 구한다. 코드 코드 해설 Pattern pattern = Pattern.compile("[0-9]+"); 정규표현식을 위한 클래스이다. 정수의 패턴은 "[0-9]+"라고 할 수 있다. Matcher matcher = pattern.matcher(word); Matcher는 ..
-
G-sync Compatible 실험 후기유틸 2019.09.20 17:01
144 fps 모니터로 테스트했다. 프레임 제한은 애프터 버너로 했다. 패스트 싱크 프레임 제한 저프레임 고프레임 X 없음 좋음 티어링 X 141 fps 좋음 좋음 X 144 fps 좋음 티어링 O 없음 좋음 좋음 O 144 fps 좋음 좋음 ※ 티어링 : 화면 찢김. 직선이 찰나의 순간동안 2개의 직선으로 나뉨. 티어링만 없다면 아무 세팅이나 써도 된다. 60fps 모니터라면 57 ~ 58fps정도 쓰면 된다. 다만 짚고 넘어가야할 것이 제한을 푸는 경우인데, 옛날부터 모니터의 주사율 이상의 프레임은 낭비라는 이론이다. 어디선가는 사람 눈으론 느낄 수 없다고 하고 어디선가에서는 프로게이머들은 다 주사율의 2배이상 건다고들 한다. 이번 실험으로 제한을 풀고 주사율 이상의 프레임을 뽑는 게 좋다는 것을 체..