본문 바로가기

Development

(98)
[개발일기] 이 코드에서 Semaphore 사용하는 이유가 무엇인가요? Semaphore? 세마포어(Semaphore)는 컴퓨터 시스템 내에서 다수의 프로세스 간의 활동을 조정하기 위해 사용되는 일반적인 변수입니다. 세마포어는 상호 배제(Mutual Exclusion)를 강제하고 경쟁 조건(Race Condition)을 피하며 프로세스 간 동기화를 구현하는 데 사용됩니다. 세마포어를 사용하는 과정에는 "wait"와 "signal" 두 가지 연산이 포함됩니다. wait 연산은 세마포어의 값을 감소시키며, signal 연산은 세마포어의 값을 증가시킵니다. 세마포어의 값이 0인 경우, wait 연산을 수행하는 프로세스는 다른 프로세스가 signal 연산을 수행할 때까지 블록됩니다. 세마포어는 임계 영역(Critical Section)을 구현하는 데 사용되며, 이는 코드의 일부를 ..
[Tip] mac에서 마우스를 트랙패드 처럼 사용하기! Mac Mouse Fix 이 글에서 소개해 드릴 내용은 Mac Mouse Fix 라는 Mac에서 사용 가능한 유틸리티 소프트웨어 입니다. 이 글은 Mac Mouse Fix 2.0 버전 기준으로 작성되었습니다. 1. Mac Mouse Fix? 트랙패드에서 가능했던 스페이스간 이동, 미션 컨트롤 실행, 데스크탑 보기, 퀵 룩 실행 등을 마우스로 할 수 있게 해주는 유틸리티 부드럽고 Responsive한 스크롤 지원 Objective-C 오픈소스(https://github.com/noah-nuebling/mac-mouse-fix) 예를 들어, 다음과 같이 동작합니다. (마우스로 조작한 것 입니다!) 2. 설치 방법 https://mousefix.org/ Mac Mouse Fix - A simple way to make your mou..
인스타그램이 오직 3명의 엔지니어로 1400만 사용자를 확보한 방법 원문 https://engineercodex.substack.com/p/how-instagram-scaled-to-14-million How Instagram scaled to 14 million users with only 3 engineers Instagram's guiding principles and tech stack explained simply engineercodex.substack.com 2010/10 부터 2011/11 까지 약 1년간 0명에서 1400만명 사용자에 도달. 엔지니어는 단 3명 3가지 원칙을 따랐음 간단하게 유지할 것 (Keep things very simple.) 바퀴를 재발명하지 말 것 (Don’t re-invent the wheel.) 가능하면 입증된 견고한 기술을 ..
[Heap] 프로그래머스 level 2 더 맵게 java 풀이 https://school.programmers.co.kr/learn/courses/30/lessons/42626 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr Heap 이란? 자료구조 중 하나로, 일반적으로 우선순위 큐(Priority Queue)를 구현하기 위해 사용되는 이진 트리 구조. 힙은 일반적으로 '최소 힙(Min Heap)' 또는 '최대 힙(Max Heap)' 두 가지 종류로 나뉨 최소 힙(Min Heap)에서는 부모 노드의 값이 항상 자식 노드의 값보다 작거나 같다. 최대 힙(Max Heap)에서는 부모 노드의 값이 항상 자식 노드의 값보다..
[정렬] 프로그래머스 level 2 가장 큰 수 python, java 풀이 https://school.programmers.co.kr/learn/courses/30/lessons/42746 처음 떠올린 생각은.. 1. 순열을 써서 가능한 모든 문자열 조합을 나열하고 2. 그걸 싹다 int로 바꿔서 sort 시켜주기 3. 다시 문자열로 바꾸기 아무리 봐도 비효율적인 것 같아서 고민해보다가 구글에 찾아봤다. 해결 흐름 1. int 배열을 모두 string으로 변환 2. 문자열에 sort를 한다. 이때 문자열에 sort를 적용하면 사전식 배열을 하게 되는데, 이는 각 문자의 ASCII 코드 값에 따라 정렬하는 방식을 의미한다. 즉, 문자열의 첫 번째 문자부터 비교하며 정렬하고, 첫 번째 문자가 동일한 경우 두 번째 문자를 비교하고, 두 번째 문자도 동일한 경우 세 번째 문자를 비교하..
무엇이 개발자를 생산적으로 만드는가 무엇이 개발자를 생산적이게 만드는가 많은 요소가 개발자 생산성에 영향을 미침 일부는 명확하고 측정하기 쉽지만, 다른 것들은 측정하기 어려워서 놓치는 경향이 있음 뭘 만들어야 하는지 알기(Knowing what to build) 잘못된 것을 빨리 만드는 것은 전혀 생산적이지 않음 고객이 뭘 요구하는지를 알고, 다른 팀들이 수용가능한 것이 무엇인지 알고(DB 테이블에 몇개의 인덱스가 가능한가, 법적으로 허용되지 않는 정보를 공유가능한가?), 이전에 시도했지만 효과가 없었던 것이 무엇인지 알아야함 더 적은 일을 하기 일을 빨리 완료 하는 것은 좋지만, 아예 "하지 않아"도 되는 것이 더 좋음 회사의 프로세스는 생산성을 떨어뜨리는 "바쁜 업무"를 추가할 수 있음 가끔은 훨씬 적은 작업으로 동일한 가치를 제공하도..
[완전 탐색] 프로그래머스 level 1 최소직사각형 python 풀이 무식해 보여도 사실은 최고의 방법일 때가 있지요. 완전 탐색? 모든 가능한 경우의 수를 시도하여 원하는 결과를 찾는 알고리즘 기법. 브루트 포스(Brute Force)라고도 함. 경우의 수가 많거나 입력 크기가 큰 경우에는 계산 비용이 높아질 수 있다. 완전 탐색은 작은 규모의 문제나 기준이 명확한 경우에 유용함. 해결 흐름 1. 가로나 세로 중에서 가장 큰 값이 다음 직사각형의 가로나 세로 값보다 작으면 교체 -> 즉 가장 큰 값을 찾아야함 2. 만약 가로 값이 가장 큰 값 일때, 세로 값도 다른 직사각형의 세로 값보다 커야함 -> 즉 작은 값들중 가장 큰 값을 찾아야함 3. 직사각형들 중에서 하나의 직사각형 가로나 세로중 더 큰 값들 중에 가장 큰 값 * 작은 값들 중에서 큰 값 코드 def solu..
[Hash] 프로그래머스 level 1 폰켓몬 Java 풀이 Hash란? Hash는 임의 크기의 데이터를 고정 크기의 값으로 변환하는 함수 또는 알고리즘을 의미 HashSet? HashSet은 중복되지 않는 고유한 값을 저장하기 위한 자료 구조 해결 흐름 1. int[] nums의 중복 요소를 제거하고 그 길이를 리턴 -> HashSet 사용 2. nums/2 개 만큼 폰켓몬을 데려갈 수 있는데 nums/2 크기가 HashSet의 크기보다 작다면 최대 종류 별로 nums/2 까지 밖에 못 데려감 -> nums/2 리턴, HashSet 크기가 nums/2 보다 작다면 HashSet 크기 리턴 입출력 예 nums, result [3,1,2,3] 2 [3,3,3,2,2,4] 3 [3,3,3,2,2,2] 2 코드 import java.util.*; class Soluti..