목록전체 글 (169)
하다보니
Classical problems of shynchronization 1. bounded-buffer problem. - 버퍼의 크기가 유한한 환경에서 producer-consumer problem. 생산자 소비자 문제 발생. producer 프로세스와 consumer 프로세스 존재. 각각 여러개 존재. producer는 공유 버퍼에 데이터를 하나 만들어서 집어 넣는 역할을 한다. producer 1. empty 버퍼가 있는가?- 없으면 기다림. 2. 공유 데이터에 lock을 건다. 3. empty buffer에 데이터 입력 및 buffer 조작 4. lock을 푼다. 5. full buffer 하나 증가. consumer 1. full 버퍼가 있나요? - 없으면 기다림 2. 공유 데이터에 lock을 건..
''' 다양한 크기의 정사각형 하얀색 또는 파란색 색종이를 만들려고 한다. 잘린 종이가 모두 하얀색이나 파란색으로 칠해져있거나 하나의 정사각형 칸이 되어 더이상 자를 수 없을 때까지 반복. ''' n=int(input()) board=[] num=[0]*2 def check(x,y,n): for i in range(x,x+n): for j in range(y,y+n): if board[x][y]!=board[i][j]:return False return True def func(x,y,z): if check(x,y,z): num[board[x][y]]+=1 return n=z//2 for i in range(2): for j in range(2): func(x+i*n,y+j*n,n) for _ in ra..
/* 상범 빌딩에서 탈출하는 가장 빠른 길. 각 변의 길이가 1인 정육면체로 이루어져 있다. 금으로 이루어져 자나갈 수 없거나. 비어있어서 지나갈 수 있다. 각 칸에서 인접한 6개의 칸으로 1분의 시간을 들여 이동할 수 있다. 대각선으로 이동하는 것은 불가능하다. 그리고 상범 빌딩의 바깥 면도 모두 금이라 출구로만 탈출 가능하다. 상범 빌딩 탈출 가능? 얼마나 걸림? 금은 #이고 비어있는 칸은 . 시작 지점은 S 탈출구는 E */ #include using namespace std; int dx[6] = { 0, 0, 1, -1, 0, 0 }; int dy[6] = { 1, -1, 0, 0, 0, 0 }; int dh[6] = { 0, 0, 0, 0, 1, -1 }; int main() { while (..
- NodeList : 모든 브라우저는 childNodes 속성에 대해 NodeList 객체 반환. 대부분 브라우저는 querySelectorAll() 메소드에 대해 NodeList 객체 반환. 이 객체는 HTML 문서와 같은 순서로 문서 내의 모든 노드를 리스트 형태로 저장하고 있다. 리스트의 각 노드는 0부터 시작하는 인덱스를 이용하여 접근할 수 있다. - document 객체 : document는 웹 페이지 그 자체를 의미한다. - document.documentelement는 HTML element(요소)를 반환한다. - JavaScript로 CSS 제어하기(여기 다시 복습하기) https://ibrahimovic.tistory.com/56
Semaphores 추상 자료형이란 object와 operation으로 구성된다. 세마포어도 추상 자료형이다. 정수 값을 가질 수 있고 해당 정수 값이 자원의 개수라고 생각하면 된다. operation은 2가지 연산이 정의되어 있다. P연산과 V연산이 정의된다. 해당 연산은 공유자원을 획득하고 반납하는 것을 처리해준다. P연산은 세마포어 변수 값을 획득하는 과정이고 V연산은 다 사용하고 나서 반납하는 과정이다. lock을 걸고 푸는 방식은 semaphore 변수가 1인 경우를 생각하면 된다. P연산을 lock을 거는 과정 V연산은 lock을 푸는 과정이다. Semaphore S P(S): while(S
n=int(input()) board=[] num=[0]*3 for _ in range(n): board.append(list(map(int,input().split()))) def check(x,y,n): for i in range(x,x+n): for j in range(y,y+n): if board[x][y]!=board[i][j]: return False return True def func(x,y,z): if check(x,y,z): num[board[x][y]+1]+=1 return n=z//3 for i in range(3): for j in range(3): func(x+n*i,y+n*j,n) func(0,0,n) for i in range(3): print(num[i]) - c++ /* ..
와...이 문제는 진짜 간단해 보였고 코드도 짰는데 이상할정도로 로직이 이해가 안가서 며칠 답답했음..휴....그래도 좀 감이 잡혀서 코드 작성하고 제출했따.... - c++ #include #include #define X first #define Y second using namespace std; int main() { int n; long long ans = 0; cin >> n; stack S; while (n--) { int height; cin >> height; int cnt = 1; while (!S.empty() && S.top().X
- new Date()는 현재 날짜와 시간을 가지는 객체를 리턴한다. new Date(); - 현재 연도/월/일/요일 구하기 let today=new Date(); let year=today.getFullYear();//년도 let month=today.getMonth();//월(1월은 0으로 표현된다.) let date=today.getDate();//날짜 let day=today.getDay();//요일 (일요일이 0, 토욜일이 6으로 표현된다.) let hours=today.getHours();//시 let minutes=today.getMinutes();//분 let seconds=today.getSeconds();//초 let milliseconds=today.getMilliseconds(); ..
공유 데이터에 접근하는 코드를 critical section이라고 한다. critical section 문제를 해결하기 위한 해결법의 충족 조건 mutual exclusion(상호 배제) - 프로세스 p1가 critical section 부분을 수행 중이면 다른 모든 프로세스들은 그들의 critical section에 들어가면 안된다. progress(진행) - 아무도 critical section에 있지 않은 상태에서 critical section에 들어가고자 하는 프로세스가 있으면 critical section에 들어가게 해주어야 한다. Bounded Waiting(유한 대기) - 특정 프로세스 입장에서 critical section에 못 들어가고 지나치게 오래 기다리는 starvation이 생기지 ..
현재 상태에서 가능한 모든 후보군을 따라 들어가며 탐색하는 알고리즘. 즉, 현재 상태에서 가능한 모든 선택지를 다 플레이해보는 방법. 백트래킹은 상당한 구현력을 필요로 하고 실수하기도 쉽다. 또한 재귀의 특성상 틀리더라도 실수한 부분을 찾기가 정말 힘들어서 많은 시간을 할애해 개념을 익히고 연습을 해야하고, 그렇지 않으면 풀이는 대충 알겠는데 그 풀이를 코드로 옮겨내지 못해서 문제를 틀릴 확률이 크다. 그래도 한편으로는 그렇게 응용을 할 수 있는 건덕지가 많지는 않기 때문에 예제들을 꼼꼼하게 풀고 BFS를 배울 때와 비슷하게 기본적인 코드의 형태를 익혀두면 할만할것이다. 백준 15649번-N과 M 비어있는 리스트에서 시작해 수를 하나씩 추가하면서 길이가 M인 수열이 완성되면 출력하는 방식으로 구현할 수 ..