181012 TIL Lec3 할일관리 step2 & 알고리즘 강의(스택, 큐)
Oct 12, 2018
»
1막,
TIL (Today I Learned),
코드스쿼드
알고리즘 강의
- 스택과 큐에 대해서 강의를 들었다.
- 푼 문제: 1) 문제: 백준 풀이: 괄호 2) 문제: 프로그래머스 풀이: 쇠막대기
- 수업시간에 이해를 못해서 밤코를 하면서 풀었는데.. 쇠막대기 풀다가 또 포기할 뻔 ㅠㅠ.. 계속 이해가 안되는 게 너무 화가 나서(!!!) 하나하나 그림을 그려서 이해해보았다….
- 딱 풀었을 때 진심 울뻔….ㅠ…
할일관리 step2
- 지난 번 PR에서 피드백 받았던 내용을 중심으로 수정하였다. 최대한 함수를 작은 단위로 쓰려고 했고, 변수 이름에서 어떤 역할인지 알 수 있도록 수정하였다.
const todo = {
taskList: [],
add(task) {
task.status = 'todo';
task.id = Date.now() + Math.random();
this.taskList.push(task);
let [todoCount, doingCount, doneCount] = this.CountStatus(this.taskList);
console.log(`id : ${task.id}, "${task.name}" 항목이 새로 추가되었습니다.
현재 상태 - todo: ${todoCount}개, doing: ${doingCount}개, done: ${doneCount}개 `);
},
update(updateObj) {
const taskToUpdate = this.findTaskToUpdate(updateObj)[0];
const statusToUpdate = this.findTaskToUpdate(updateObj)[1];
if (statusToUpdate === 'doing') {
let doingTime = new Date().getTime();
taskToUpdate.doingTime = doingTime;
this.printUpdate(taskToUpdate, statusToUpdate);
}
if (statusToUpdate === 'done') {
let takenTime = (new Date().getTime() - taskToUpdate.doingTime) / 1000;
takenTime = this.getTakenTimeWithUnit(takenTime);
taskToUpdate.takenTime = takenTime;
delete taskToUpdate.doingTime;
this.printUpdate(taskToUpdate, statusToUpdate);
}
},
findTaskToUpdate(updateObj) {
let taskToUpdate = {};
const statusToUpdate = updateObj.nextstatus.trim().toLowerCase();
for (const values of this.taskList) {
if (values.id === updateObj.id) {
taskToUpdate = values;
}
}
return [taskToUpdate, statusToUpdate];
},
getTakenTimeWithUnit(takenTime) {
const timeUnit = {
minute: 60,
hour: 3600,
day: 86400
};
if (takenTime <= timeUnit.minute) {
takenTime = takenTime + '초';
} else if (takenTime <= timeUnit.hour) {
takenTime = (takenTime / 60).toFixed(0) + '분';
} else if (takenTime <= timeUnit.day) {
takenTime = (takenTime / 3600).toFixed(0) + '시간';
} else if (takenTime > timeUnit.day) {
takenTime = (takenTime / 86400).toFixed(0) + '일';
};
return takenTime;
},
printUpdate(taskToUpdate, statusToUpdate) {
console.log(
`id : ${taskToUpdate.id}, "${taskToUpdate.name}" 항목이 (${taskToUpdate.status} => ${statusToUpdate}) 상태로 업데이트되었습니다.`);
taskToUpdate.status = statusToUpdate;
let [todoCount, doingCount, doneCount] = this.CountStatus(this.taskList);
console.log(`현재 상태 - todo: ${todoCount}개, doing: ${doingCount}개, done: ${doneCount}개`);
},
remove(id) {
for (const values of this.taskList) {
if (values.id === id.id) {
console.log(`id : ${id.id}, "${values.name}" 삭제 완료.`);
this.taskList.splice(this.taskList.indexOf(values), 1);
}
}
},
CountStatus(taskList) {
let [todo, doing, done] = [0, 0, 0];
for (const values of taskList) {
if (values.status === 'todo') {
todo++;
}
if (values.status === 'doing') {
doing++;
}
if (values.status === 'done') {
done++;
}
}
return [todo, doing, done];
},
findTags(taskList) {
let tagObj = {};
for (const values of taskList) {
if (!tagObj[values.tag]) {
tagObj[values.tag] = 1;
} else if (tagObj[values.tag])
tagObj[values.tag] += 1;
}
return tagObj;
},
showTag(tag) {
const result = this.taskList.filter(value => value.tag === tag);
const [todoCount, doingCount, doneCount] = this.CountStatus(result);
console.log(`tag가 "${tag}"인 할 일: `);
if (todoCount !== 0) {
this.showTagPrint('todo', result, todoCount);
}
if (doingCount !== 0) {
this.showTagPrint('doing', result, doingCount);
}
if (doneCount !== 0) {
this.showTagPrint('done', result, doneCount);
}
},
showTagPrint(status, result, statusCount) {
console.log(`[${status}, 총 ${statusCount}개]`);
const taskWithSameStatus = result.filter(value => value.status === status);
taskWithSameStatus.forEach(function (task) {
console.log(`- ${task.id}번, ${task.name}`);
});
},
showTags() {
const result = this.taskList.filter(value => value.tag !== 0);
const tagObj = this.findTags(result);
for (const tag in tagObj) {
console.log(`\n[${tag}, 총 ${tagObj[tag]}개]`);
const tasksWithSameObj = result.filter(result => result.tag === tag);
tasksWithSameObj.forEach(function (task) {
console.log(`- ${task.id}번, ${task.name}, [${task.status}]`);
});
}
},
show(status) {
let showStatus = status.trim().toLowerCase();
for (const values of this.taskList) {
if (values.status === showStatus && showStatus !== 'done') {
console.log(`- ${values.id}번, ${values.name}, [${values.tag}]`);
}
if (values.status === showStatus && showStatus === 'done') {
console.log(`- ${values.id}번, ${values.name}, [${values.tag}], ${values.takenTime}`);
}
}
},
showAll() {
const [todoCount, doingCount, doneCount] = this.CountStatus(this.taskList);
console.log(`총 ${todoCount + doingCount + doneCount}개의 리스트를 가져왔습니다. 2초 뒤에 todo 내역을 출력합니다...`);
setTimeout(function () {
console.log(`[todo, 총 ${todoCount}개]`);
let todoTasks = this.sortTaskByStatus('todo');
this.showAllPrint(todoTasks);
console.log(`\n 지금부터 3초 뒤에 doing 내역을 출력합니다...`);
setTimeout(function () {
console.log(`[doing, 총 ${doingCount}개]`);
let doingTasks = this.sortTaskByStatus('doing');
this.showAllPrint(doingTasks);
console.log(`\n 지금부터 2초 뒤에 done 내역을 출력합니다...`);
setTimeout(function () {
console.log(`[done, 총 ${doneCount}개]`);
let doneTasks = this.sortTaskByStatus('done');
this.showAllPrint(doneTasks);
}.bind(this), 2000);
}.bind(this), 3000);
}.bind(this), 2000);
},
sortTaskByStatus(status) {
let tasks = [];
for (const values of this.taskList) {
if (values.status === status) {
tasks.push(values);
}
}
return tasks;
},
showAllPrint(arr) {
arr.forEach(function (task) {
if (!!!task.takenTime) {
console.log(`- ${task.id}번, ${task.name}, [${task.tag}]`);
} else if (task.takenTime) {
console.log(`- ${task.id}번, ${task.name}, [${task.tag}], ${task.takenTime}`)
};
});
}
}
- 이번엔 머지되서 step3 가고싶다아아아~~
장비 구입
- 코드스쿼드에서 쓸 모니터를 구입했당
11인치 맥북에어에서 작업하다가 24인치 모니터로 작업하니까 넘나 좋음.. :)
근데.. thunderbolt에서 바로 hdmi로 이어서 그런가 화면 꺼짐이 계속 있네^^….ㅎ…귀찮게…. 그래서 일단 다음주에 모니터 새로 받아보고 (한성 AS 넘나 쿨.. ‘새로 보내드릴게여’) 그래도 안되면 어댑터를 바꿔보기로..
내친김에 집에 오래된 모니터에도 맥을 연결해서 쓰려고 어댑터를 샀다. 그냥 구린 모니터인줄 알았는데 틸트가 된다니..! (감격) DVI-D라는 것으로 연결하여 쓰는데, 코드스쿼드에서 hdmi로 연결해서 쓰는 것보다 좀 더 안정적인거 같은 건 기분 탓인가…
더 열심히 코딩할 일만 남았다!!
주말 todo (요새 todolist 짜고 있어서 그런지, ‘todo’란 글씨가 보기 시르네..?)
- lecture 3 강의 복습(정규표현식, 클래스)
- 알고리즘 2~3문제
- 방통대 과제 제출