Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- TiL
- Vue.js
- 크래프톤 정글
- userprog
- 코드트리
- 큐
- 알고리즘
- Flutter
- 나만무
- 시스템콜
- 자바
- 자바스크립트
- HTML
- 핀토스
- 백준
- 크래프톤정글
- 티스토리챌린지
- corou
- 소켓
- 4기
- 사이드프로젝트
- 모션비트
- 스택
- CSS
- defee
- 오블완
- JavaScript
- Java
- 리액트
- pintos
Archives
- Today
- Total
미새문지
크래프톤 정글 week08, day61 - 잔디심기, 조건 변수, convar 성공 본문
728x90
오늘의 잔디심기
백준
|
25495 |
자바스크립트
|
브론즈2
|
에어팟 |
const fs = require("fs");
const filePath = process.platform === "linux" ? "/dev/stdin" : "./input.txt";
let input = fs.readFileSync(filePath).toString().split("\n");
const Airpot = (n) => {
const phoneList = input[1].split(" ").map(Number);
let batteryUse = 0;
let lastPhone = 0;
let lastPhoneUse = 0;
for(let i = 0; i < n; i++) {
if(phoneList[i] == lastPhone) {
batteryUse += lastPhoneUse*2;
lastPhoneUse *= 2;
} else {
batteryUse += 2;
lastPhoneUse = 2;
}
lastPhone = phoneList[i];
// 누적 소모량이 100을 넘으면 초기화하고 첨부터
if(batteryUse >= 100) {
batteryUse = 0;
lastPhone = 0;
lastPhoneUse = 0;
}
}
console.log(batteryUse);
}
const n = Number(input[0]);
Airpot(n);
처음에 그냥 중복된 값만 제거하고 전력 소모량을 남은 배열 길이의 2배만큼 하면 될 줄 알았는데, 누적 소모량이 100을 넘어가면 초기화해주고 다시 시작하는걸 간과했다. 그리고 새로운 값이 들어오면 2씩 높여야했다.
조건 변수(Condition Variable)
- 동기화 목적으로 사용되며, 특히 스레드 간의 상호 작용을 조절 하는 데 필요한 도구이다.
- 조건 변수 사용 상황
- 자원의 상태를 기다리는 스레드
- 스레드가 특정 조건이 충족될 때까지 대기해야 하는 경우에 조건 변수를 사용한다.
- 예를 들어, 스레드가 데이터를 처리하려고 하지만 아직 처리할 데이터가 없는 경우, 조건 변수를 사용하여 데이터가 사용 가능해질 때까지 스레드를 대기 시킬 수 있다.
- 조건의 변경을 알리는 스레드
- 다른 스레드가 특정 조건의 변경을 알리는데 조건 변수를 사용한다.
- 예를 들어, 데이터를 생성하는 스레드가 새로운 데이터를 생성하면 조건 변수를 사용하여 이를 기다리는 다른 스레드에게 알릴 수 있다.
- 자원의 상태를 기다리는 스레드
- 조건 변수는 일반적으로 뮤텍스와 함께 상호 배제를 보장하며, 이를 통해 여러 스레드가 동시에 동일한 자원에 접근하는 것을 방지한다. 이렇게 함으로써, 조건 변수는 운영체제에서 중요한 동기화 메커니즘을 제공한다.
오늘도 캐리하는 캐리머신 재남씨와 세마포어 마스터 에린씨 덕분에 아침부터 fifo, sema, chain, nest를 바로 해결했다.
기존에 구현했던 acquire 함수의 priority 조정 로직을 재귀함수로 해결했다. 아침에 와서 집중도 잘 안될텐데 바로 코드 작성하는 거 보면 너무 간지난다.
그리고 오후에 좀 막혔던 convar은 기존에 있던 semaphore_elem 구조체를 확인 못하고 값을 못가져와서 헤맸다가 바로 해결했다.
static bool sema_elem_priority(const struct list_elem *a_, const struct list_elem *b_,
void *aux UNUSED){
struct semaphore_elem *a = list_entry (a_, struct semaphore_elem, elem);
struct semaphore_elem *b = list_entry (b_, struct semaphore_elem, elem);
return (a->sema_priority > b->sema_priority);
}
이제 남은 멀티레벨 피드백 큐 문제들만 남아 오늘은 각자 정리하는 시간을 가졌다.
덤으로 오늘 빨래할 때 사용한 건조기가 고장나서 중간에 다른 건조기를 사용하느라 좀 시간을 날렸는데, 우산도 그렇고 손에 닿으면 다 파괴당하는 것 같다.
학습 시간 : 10 ~ 26시
728x90
'크래프톤 정글 > TIL' 카테고리의 다른 글
크래프톤 정글 week08, day63 - 잔디심기, pintOS - Project1 result (1) | 2024.03.11 |
---|---|
크래프톤 정글 week08, day62 - 잔디심기, mlfqs-load-avg까지 구현 (1) | 2024.03.10 |
크래프톤 정글 week08, day60 - 잔디심기, priority-donate-multiple 구현 (1) | 2024.03.08 |
크래프톤 정글 week07, day59 - 잔디심기, alarm-simultaneous 구현 (1) | 2024.03.07 |
크래프톤 정글 week07, day58 - demand paging, TLB, 추상화 디자인, 잔디심기 (1) | 2024.03.05 |