본문 바로가기

전체 글127

Python subprocess 모듈 목차 LIST 들어가기 전에 Concurrency(병행성) : 컴퓨터가 여러 일을 동시에 하듯이 수행하는 것 예) CPU 코어가 하나인 컴퓨터에서 운영체제는 단일 프로세서에서 실행하는 프로그램을 교대로 빠르게 변경하여 프로그램들이 동시에 실행되는 것처럼 보이게 한다. Parallelism(병렬성) : 실제로 여러 작업을 동시에 실행하는 것 CPU 코어가 여러 개인 컴퓨터는 여러 프로그램을 동시에 실행할 수 있다. 각 CPU 코어가 각기 다른 프로그램의 명령어(instruction)를 실행하여 같은 순간에 여러 프로그램들이 실행될 수 있다. Concurrency 와 Parallelism은 속도 향상의 측면에서 가장 큰 차이점을 가진다. 한 프로그램에서 서로 다른 작업을 병렬로 진행하면 전체 작업에 걸리는.. 2023. 8. 20.
[프로그래머스] 테이블 해시 함수 Java 풀이 목차 LIST 최종 결과 import java.util.*; public class Main { public static void main(String[] args) { int[][] data = {{2,2,6}, {1,5,10}, {4,2,9}, {3,8,3}}; int res = solution(data, 2, 2, 3); System.out.print(res); } public static int solution(int[][] data, int col, int row_begin, int row_end) { Arrays.sort(data, (o1, o2) ->{ if(o1[col-1] == o2[col-1]) { return Integer.compare(o2[0], o1[0]); } return In.. 2023. 7. 30.
[프로그래머스] 숫자 변환하기 Java 풀이 첫 번째 풀이 exists를 사용하지 않으면 시간초과가 뜬다. 이전에 한번이라도 큐에 들어갔던 숫자면 skip. Node 를 쓰고싶지 않았는데, 다른 방법이 생각나지 않아서 사용했다. 밑에 풀이에선 배열로 수정됨 import java.util.*; public class Main { public static void main(String[] args) { int res = solution(2, 5, 4); System.out.print(res); } public static int solution(int x, int y, int n) { if (x == y) return 0; Queue queue = new LinkedList(); int[] exists = new int[1000001]; queue.a.. 2023. 7. 28.
[Druid] indexing service / Overlord 목차 LIST Druid indexing service Apache druid의 indexing service는 인덱싱 관련 작업을 실행하는 고가용 분산 서비스 입니다. 인덱싱 작업은 드루이드 세그먼트를 생성하거나 destroy(파괴)합니다. 인덱싱 서비스는 master/slave 와 같은 아키텍처를 가지고 있습니다. 인덱싱 서비스는 세개의 주 구성요소로 이루어져 있습니다. 1) Peon component : 단일 task 실행 2) Middle Manager component : peon 관리 3) Overlord component : middle manager에게 작업 분배 Overlord와 MiddleManager는 동일한 프로세스 또는 여러 프로세스에서 실행될 수 있지만, Middle Manage.. 2023. 7. 16.
[스프링부트] 등장 배경, 주요 특징, 핵심 4가지 목차 LIST 프레임워크란? 소프트웨어 개발을 수월하게 하기 위한 소프트웨어 개발 환경입니다. 프레임워크는 frame(틀)과 work(일하다)의 합성어로 일하기 쉬운 틀을 제공하는 것입니다. 프레임워크는 정해진 틀에서 개발해야 한다는 단점이 있지만 개발 효율은 높다는 장점이 있습니다. 프레임워크는 애플리케이션을 개발할 때 전체적인 구조를 잡기 위해 사용하는 것이고, 라이브러리는 개발을 하는 과정에서 필요한 기능을 구현하기 위해 사용하는 것입니다. 스프링과 스프링 부트? 스프링의 등장 배경 엔터프라이즈 어플리케이션이라는 용어는 대규모의 복잡한 데이터를 관리하는 애플리케이션입니다. 은행 시스템을 생각해보면, 몇 천만명의 사람이 한꺼번에 잔고를 조회하고 입금이나 출금 요청을 하거나 새로운 통장을 개설하기도 합.. 2023. 5. 30.
[프로그래머스] 뒤에 있는 큰 수 찾기 Java 풀이 조건 : 4 ≤ numbers의 길이 ≤ 1,000,000 위 조건때문에 시간 복잡도가 O(n^2)가 되면 타임아웃이 납니다. 따라서 이중포문 사용하면 안됨 public class Main { public static void main(String[] args) { int[] numbers = {9, 1, 5, 3, 6, 2}; int[] res = solution(numbers); for (int r : res) { System.out.print(r); } } public static int[] solution(int[] numbers) { int N = numbers.length; int[] results = new int[N]; Stack stack = new Stack(); stack.push(n.. 2023. 5. 28.
[프로그래머스] 과제 진행하기 Java 풀이 한줄 요약 : HH:mm 포맷이 나오면 '시간*60+분'을 사용한다. stack사용 첫 번째 풀이) 이 풀이로 통과 했으나, 다른 사람들은 시간 다루는 부분을 어떻게 했는지 확인해봤다. 나는 12:20 과 같이 시간으로 들어오는 값을 HH:mm 타입의 dateformat으로 계산했는데, 다른사람들은 '시간*60+분' 으로 minutes로 변경해서 start를 저장해서 사용하는 것을 확인했다. 나중에 문제 풀 때 도움이 많이 될 것 같아서 이 방법으로 변경하기로 결정 import java.text.SimpleDateFormat; import java.util.*; import java.util.concurrent.TimeUnit; public class Main { public static void mai.. 2023. 5. 27.
[프로그래머스] 리코쳇 로봇 Java 풀이 개인적으로 좋았던 문제 bfs+dp를 정석으로 사용할 수 있다. 알고리즘을 풀 때 map과 방향이 나오면 dir_x, dir_y는 무조건 사용해 주는게 좋다. 아래 코드에서는 n = board.length, m = board[0].length() 이런식으로 빼주면 더 깔끔해질듯 bfs를 활용한 탐색을 할 때 주의해야 하는 점 1. visited 사용 2. map을 벗어나지 않게 조건 (x >= 0 && x = 0 && y < board[0].length()) 여기까지는 dp+bfs 기본이고 문제에 맞게 조건을 더 추가해주면 된다. import java.util.LinkedList; import java.util.Queue; public class Main { publ.. 2023. 5. 25.
[Git] 3-way merge와 rebase를 이용한 fast-forward merge 목차 LIST 3-way 병합하기 3-way merge는 쉽게 말해서 내 브랜치 커밋, 다른 브랜치 커밋을 병합해서 새로운 커밋을 생성하는 방법입니다. 어떤 상황에서 사용되는지 아래 예시로 살펴보겠습니다. 예시 상황 : '댓글 달기' 기능 개발을 완료하고 [master] 브랜치에 머지하고 릴리즈 했습니다. 그리고 [master] 브랜치에서 [feature] 브랜치를 따서 '좋아요' 기능을 개발하고 있는데, 앞서 개발한 '댓글 달기' 기능에 버그가 발견되었습니다. 작업 중이던 [feature] 브랜치의 작업은 다행히 커밋이 된 상황. 이때, hotfix 브랜치를 사용해서 댓글 달기 기능의 버그를 수정하려고 합니다. 1. 상황 설정 # [feature1] 브랜치 생성 및 이동 (master) $ git ch.. 2023. 4. 9.
반응형