본문 바로가기

전체 글

(172)
프로세스와 스레드의 차이를 알아보자 프로세스와 스레드 프로세스는 실행중인 프로그램을 의미하고, 스레드는 프로세스의 실행단위이다. 그러므로 스레드는 한 프로세스 내에서 동작되는 여러 실행흐름이라고 말할 수 있다. 또 신기한 것은 프로세스 간의 통신보다 스레드 간의 통신의 속도가 더 빠르다고 한다. 아래의 사진이 프로세스와 스레드의 차이를 정말 적절하게 보여주는 것 같다. 왜 스레드간의 통신 속도가 더 빠른거야? 위의 사진을 보니까 왜 스레드간의 통신 속도가 더 빠른지 알것만 같다..사진상으로 가까이 있으니까..? 비슷한것 같다. 정확히 설명하자면 위의 사진에서 스레드들은 한 프로세스 안에서 존재한다. 그렇다면 이렇게 생각해 볼 수 있다. 저 프로세스 내에서 어떤 데이터 영역을 프로세스끼리 공유하고 있다면 컨텍스트 스위칭의 비용이 줄어들지 않..
[boj 1300] K번째 수 - 이분 탐색 문제 풀이 방식 이분 탐색 주의할 점 2차원 배열을 1차원 배열로 만드는 것이 가장 쉬운 방법이지만 이렇게 할 경우 배열의 크기가 너무 크므로 메모리 초과가 발생한다. 그러므로 특정 방식을 통해 이분 탐색으로 풀이했다. 만약 n = 3일 때, 2차원 배열은 아래와 같이 만들어진다. 1 2 3 - - - - - > Math.min( 4 / 1 , 3) -> 3 2 4 6 - - - - - > Math.min( 4 / 2 , 3) -> 2 3 6 9 - - - - - > Math.min( 4 / 3 , 3) -> 1 여기서 만약 7번째 수를 찾는다면 7번째 수보다 낮은 6개의 숫자를 찾으면 되는데, 이때 이분 탐색의 mid를 특정 숫자로 하여 아래와 같은 방법을 통해 찾아낼 수 있다. 위의 이차원 배열은 하..
이분 탐색 코드로 구현하기 - 자바 이분 탐색을 통해 특정 숫자를 찾을 때는 일반적인 이분 탐색을 구현하여 풀이하면 된다. 그러나 만약 특정 수의 개수를 카운팅 하고 싶은 상황에서는 어떻게 해야 할까? 아래와 같이 일반적으로 구현하게 된다면 찾고자 하는 숫자의 index를 찾을 수는 있겠지만 몇 개가 존재하는지 세는 것은 추가적인 연산이 필요할 것이다. 일반적인 이분 탐색 구현 private static boolean find(int num, int[] arr) { int l = 0; int r = arr.length-1; while(l num){ r = mid-1; } else { l = mid+1; } } return false; } 그래서 아래와 같은 코드로 왼쪽과 오른쪽을 스캔하는 코드를 구현해보았다. 찾은 index를 기준으로 왼..
버블 정렬 코드로 구현 하기 - 자바 버블 정렬( - 整列, 영어: bubble sort, sinking sort)은 두 인접한 원소를 검사하여 정렬하는 방법이다. 시간 복잡도가 {\displaystyle O(n^{2})} 로 상당히 느리지만, 코드가 단순하기 때문에 자주 사용된다. 원소의 이동이 거품이 수면으로 올라오는 듯한 모습을 보이기 때문에 지어진 이름이다. 양방향으로 번갈아 수행하면 칵테일 정렬이 된다. 위키백과에서는 버블 정렬을 위와 같이 설명하며, 좋은 예제와 수도 코드를 보여준다. www.acmicpc.net/problem/2750 2750번: 수 정렬하기 첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄부터 N개의 줄에는 숫자가 주어진다. 이 수는 절댓값이 1,000보다 작거나 같은 정수이다. 수는 중..
[Leetcode 31/100] Task Scheduler - Medium leetcode.com/problems/task-scheduler/ Task Scheduler - LeetCode Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com 문제 풀이 방식 Greedy 풀이 주의할 점 이 문제는 가장 많은 task의 count가 idle의 값을 결정할 수 있다는 것을 깨닫는 것이 중요하다. 노트로 최대한 많은 케이스의 문제를 예시로 직접 작성해보면서 규칙을 찾아서 풀려고 노력했다. 소스코드 class Solution { public int leastInte..
프로그래머스 - 카카오프렌즈 컬러링북 programmers.co.kr/learn/courses/30/lessons/1829 코딩테스트 연습 - 카카오프렌즈 컬러링북 6 4 [[1, 1, 1, 0], [1, 2, 2, 0], [1, 0, 0, 1], [0, 0, 0, 1], [0, 0, 0, 3], [0, 0, 0, 3]] [4, 5] programmers.co.kr 오랜만에 프로그래머스 문제를 풀어보았습니다. 이 문제 유형은 많이 풀어봐서 쉽게 접근 방법을 알 수 있었습니다. 문제 풀이 방식 BFS 소스코드
[Leetcode 30/100] Minimum Path Sum - Medium leetcode.com/problems/minimum-path-sum/ Minimum Path Sum - LeetCode Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com Leetcode 30번째 풀이 글인데, 사실 포스팅 안한거까지 80문제 정도 풀었다.. 앞으로는 포스팅을 꾸준히 해서 100문제를 빨리 채우려고 한다. 이 문제는 재귀 풀이 방식을 통한 풀이로 TLE가 났는데, 다이나믹 프로그래밍으로 어떻게 풀이했는지 써보려고 한다. 문제 풀이 방식 Recursrion 풀이 주의..
[Leetcode 29/100] Unique Paths - Medium leetcode.com/problems/unique-paths/ Unique Paths - LeetCode Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com 문제 풀이 방식 다이나믹 프로그래밍으로 풀이 주의할 점 문제를 접근할 때, 어떤 풀이 방법으로 접근하는지 떠올리는 것이 중요할 것 같다. 다이나믹 프로그래밍의 개념을 학습하고 처음으로 풀이해보았는데, 문제에서 이동 제약 조건이 있어 점화식을 쉽게 세울 수 있었다. 핵심 점화식은 다음과 같다. map[i][j] = map[i-1..