분류 전체보기
MLFQ (Multi-Level Feedback Queue)
구조 여러 개의 큐로 구성되어 있음 각 큐는 우선순위를 가지고 있음 실행될 준비가 되어있는 일은 큐에 들어가있음 룰 룰1: 우선순위가 높은 큐에 들어가 있는 일이 먼저 실행됨 룰2: 우선순위가 같다면 (같은 큐에 들어가 있다면) RR 방식으로 실행됨 룰3: 새로운 일이 들어오면, 그 일은 우선순위가 가장 높은 큐에 들어감 룰4a: 일이 자신에게 주어진 시간을 다 쓰면 우선순위가 낮아짐 룰4b: 자신에게 주어진 시간을 다 쓰기 전에 CPU를 포기하면 우선순위를 유지함 Feedback 특성 CPU intensive: 우선순위를 낮춰줌 Recently do I/Os: 우선순위를 높여줌 Batch (낮은 우선순위) vs Interactive (높은 우선순위) 즉 I/O intensive한 job에 유리함 -> ..
[파이썬 테크닉] 로컬 변수처럼 작동하는 함수 파라미터
위 코드에서 a는 그저 함수의 파라미터일 뿐이므로, func()을 몇 번을 실행하든 [ ] 이 계속 출력될 것이라고 잘못 예상할 수 있다. 하지만 파라미터를 넘겨주지 않는 경우 a는 계속 같은 주소를 참조하기 때문에 위와 같은 결과가 나오게 된다. 근데 직관적이지 않은 개념이라 지양해야할 패턴이라고 생각함. 함수 선언과 동시에 변수를 선언하는 효과가 나기 때문에 잘만 쓰면 숏코딩할 때는 유용할수도..
[프로그래머스] 베스트앨범 (+파이썬 테크닉)
문제: https://programmers.co.kr/learn/courses/30/lessons/42579 코딩테스트 연습 - 베스트앨범 스트리밍 사이트에서 장르 별로 가장 많이 재생된 노래를 두 개씩 모아 베스트 앨범을 출시하려 합니다. 노래는 고유 번호로 구분하며, 노래를 수록하는 기준은 다음과 같습니다. 속한 노래가 programmers.co.kr 자잘하게 신경써줘야할 게 많아서 난이도가 레벨3으로 측정된 것 같습니다. 천천히 한 단계씩 해결해나가면 오래걸리긴 해도 안 풀리는 문제는 아닙니다. 아래는 제 풀이입니다. 다른 분들의 풀이를 보니 알고 있으면 좋을 만한 테크닉들이 보여서 정리해봤습니다. 리스트에서 중복 제거 map과 sum 활용하기 myList = [(1,10),(2,20),(3,30)..
[자료구조] 연결리스트 구현하기 (C++)
C++을 이용해 연결리스트를 구현합니다. #include struct node { int data; node *next; }; struct linked_list { node *head = new node; node *current = new node; linked_list() { current = head; } // 맨 뒤에 노드를 추가 void append(int data) { node *new_node = new node; new_node->data = data; current->next = new_node; current = new_node; } // n번째 노드 뒤에 노드 삽입 void insert(int n, int data) { node *new_node = new node; node *pre..
[자료구조] 스택 구현하기 (C++)
문제: https://www.acmicpc.net/problem/10828 10828번: 스택 첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지 www.acmicpc.net 스택은 데이터의 입력과 출력이 한쪽 방향으로만 이루어지기 때문에 배열을 이용해서 구현할 수 있습니다. #include #include struct stack { int arr[10000]; int top_index = -1; // arr[top]을 리턴하고 top을 1 감소시킨다. int pop() { if (isEmpty()) return -1; return arr[to..
[프로그래머스] 위장
문제: https://programmers.co.kr/learn/courses/30/lessons/42578 코딩테스트 연습 - 위장 programmers.co.kr 수학적으로 접근하면 구현을 쌩까고 바로 수식으로 처리해버릴 수 있습니다. 1. 각 부위별 옷의 개수를 카운트합니다. 2. (각 부위별 옷의 개수 + 1) 을 해서 모두 곱연산합니다. 3. 그렇게 나온 결과에서 1을 뺀 값이 정답입니다.
[프로그래머스] 전화번호 목록 (정렬보다는 해시를)
문제: https://programmers.co.kr/learn/courses/30/lessons/42577?language=python3 코딩테스트 연습 - 전화번호 목록 전화번호부에 적힌 전화번호 중, 한 번호가 다른 번호의 접두어인 경우가 있는지 확인하려 합니다. 전화번호가 다음과 같을 경우, 구조대 전화번호는 영석이의 전화번호의 접두사입니다. 구조 programmers.co.kr 정렬을 이용하는 방법 사실 보자마자 딱 생각나는 방법은 정렬하고 두 개씩 비교하는 방법입니다. 정렬하면 앞부분이 비슷한 것들끼리 인접하게 되기 때문에 인접한 두 전화번호끼리만 비교해도 결과는 맞게 나옵니다. 효율성 테스트도 나쁘지 않게 나오네요. 해시로 풀어보기 그래도 해시 관련 문제이므로 해시로 다시 풀어봤습니다. 접두..
[프로그래머스] 완주하지 못한 선수
문제: https://programmers.co.kr/learn/courses/30/lessons/42576 보자마자 생각나는 아이디어는 이랬습니다. 각 리스트를 정렬하고, 처음부터 쭉 순회하다가 원소가 서로 다르면 그 원소를 리턴 하지만 해시를 이용하면 더 빠르게 해결할 수 있습니다.
[React] props에 객체를 전달하면: pass by reference
함수 파라미터로 객체를 넘기면 참조값이 전달됩니다. 마찬가지로 props에 객체를 전달하면 참조값이 전달됩니다. (배열 또한 객체이므로 동일) 예시) change를 누르고 print log를 누르면 777이 출력됩니다. 화면상의 숫자값은 당연히 변경되지 않습니다. +추가 리액트의 리렌더링 조건 중에 props가 바뀌는 경우가 있는데 myobj를 props로 넘기고 myobj = obj2; 로 myobj를 변경해도 리렌더링되지 않는다. 이는 애초에 App 컴포넌트가 리렌더링되지 않았기 때문이다.
[React] 리액트 디자인 패턴에 대한 고찰
컴포넌트란? 재사용이 가능한 독립적인 모듈 단위 보통 컴포넌트를 말할 때 독립적이다. 재사용이 가능하다. 라고 말하지만 사실 그건 이상적인 컴포넌트의 모습일 뿐, 현실은 그렇게 간단하지 않습니다. 완벽하게 독립적인 컴포넌트는 무엇일까요? 아래의 Counter 컴포넌트를 봅시다. 사실 저는 이게 이상적인 컴포넌트의 모습이라고 생각합니다. 외부의 간섭 없이, 자기가 가지고 있는 것들로 할 일을 모두 수행합니다. 따라서 아래와 같이 정말로 레고를 조립하듯 간단하게 사용할 수 있습니다. 하지만 독립성이 컴포넌트가 추구해야할 모든 것은 아닙니다. 독립성은 확장성과 반비례하는데, 이는 재사용성과도 관련이 있습니다. 확장할 수 없다면 재사용할 수도 없기 때문에, 재사용이 가능한 독립적인 단위라는 설명은 사실 상반되는..
[React Native] axios로 formData 전송이 안되는 문제
보통 react native에서 axios로 formData를 보내려고 하면 아래와 같이 headers에 'content-type'을 'multipart/form-data'로 설정합니다. const body = new FormData(); body.append('email', 'test'); body.append('password', 'test'); const response = await myAxios.post('/auth/sign-up', body, { headers: { 'content-type': 'multipart/form-data' }, }); 하지만 서버측 처리에 따라 위와 같이 하는 경우 에러가 발생할 수 있습니다. axios가 formData를 전송할 때 문자열로 바꿔버리기 때문인데, t..
[React] Closure와 초월자 useRef()
최근에 타이머를 만들 일이 생겼습니다. setInterval()을 이용해 주기적으로 특정 함수를 호출할 수 있기 때문에 타이머를 구현할 때는 보통 이 함수를 사용합니다. const [time, setTime] = useState(0); useEffect(() => { const timer = setInterval(() => { console.log(time); setTime(time + 1); }, 1000); }, []) 처음에는 위와 같이 구현해봤습니다. 매초마다 time 값이 1씩 증가하는 것을 예상했으나 동작이 제대로 되지 않았습니다. 화면에는 0에서 1로 증가하더니 더이상 증가하지 않았고, 로그에는 계속 0만 찍히는 모습입니다. 그래서 코드를 아래와 같이 바꿔보았습니다. (setLocalTime..
[python] 파이썬 PIL로 투명한 이미지 크기 조정, 합성하기
위 이미지(test.png)의 크기는 (400, 200) 이지만, (700, 700)으로 조정해보려고 한다. 단순히 resize하면 이미지가 찌그러지기 때문에 paste를 활용해야한다. 배경은 투명색을 유지한다. 간단하게 (700, 700) 크기의 이미지 객체를 만들고 거기에 이미지를 paste하면 된다. from PIL import Image baseLayerSize = (700, 700) baseLayer = Image.new("RGBA", baseLayerSize) image = Image.open('test.png') baseLayer.paste(image) baseLayer.show() baseLayer.save('result.png') 투명해서 잘 보이진 않지만 크기가 조정되었다. 이렇게 하면..
[안드로이드 스튜디오] tablayout의 tabitem 사용시 java.lang.NullPointerException: Missing required view with ID
java.lang.NullPointerException: Missing required view with ID tablayout의 tabitem ID를 지정하는 경우 위와 같은 오류가 뜬다. 마테리얼 라이브러리를 사용하는 경우 발생하는 버그로 tabitem의 ID를 삭제해주면 해결된다. 참조: https://github.com/material-components/material-components-android/issues/1162 [Tab Items] Tab Items does not work with View Binding, throws NPE · Issue #1162 · material-components/material-components-andr Description: Filing this in..
[머신러닝] 파이토치 텐서 (tensor)의 연산
1. 텐서 기초 a. 텐서 선언하기 1차원 텐서 tensor = torch.FloatTensor([0., 1., 2., 3.]) 2차원 텐서 tensor = torch.FloatTensor([[1., 2., 3.], [4., 5., 6.], [7., 8., 9.], [10., 11., 12.]]) print(tensor.dim()) print(tensor.size()) print(tensor[:, :2]) # 첫번째 차원 전체 선택, 두번쨰 차원의 0번째, 1번째 요소 선택 2 torch.Size([4, 3]) tensor([[ 1., 2.], [ 4., 5.], [ 7., 8.], [10., 11.]] 데이터로부터 직접 생성 data = [[1, 2],[3, 4]] x_data = torch.tenso..