@ 노드 강의를 듣기 시작했다. express를 배우기에 앞서 문법을 먼저 배웠다.
@ CS 스터디 발표. 피싱과 SQL 인젝션 위주로 좀 더 조사해보았다.
@ 알고리즘 챌린지까지 완료
@ 자바스크립트 문법들도 시간만 많으면 더 공부하고 더 정리하고 싶은데 주특기 주차가 시작되고 개인과제가 있다보니 시간이 부족하다. 일단 노드 강의가 우선인데 필기하면서 들으려니 진도가 늦다. 좀 더 속도를 내긴 해야겠다.
다 옮김.
변수 선언
자료형
함수
동기/비동기
블라킹/논블라킹
promise, async, await
호이스팅, TDZ
등에 대해 배웠다.
알고리즘 모든 문제를 다 풀었다. 달리기반 문제와 챌린지 문제까지.
//[카카오 인턴] 키패드 누르기. 이건 다른 답들 봐도 짧은 코드가 하나도 없네.
function distance(a, b) //칸 이동 수 구하는 함수.
return Math.abs(a[0]-b[0]) + Math.abs(a[1]-b[1]);
function solution(numbers, hand) {
let pri = (hand == "left"? 'L' : 'R');
var coo = [[1,0], //해당 번호의 좌표값.
[0, 3], [1, 3], [2, 3],
[0, 2], [1, 2], [2, 2],
[0, 1], [1, 1], [2, 1],
];
var lc = [0,0];
let rc = [2, 0];
var answer = '';
for ( v of numbers){ //첨에 걍 for문 쓰다가 numbers[i] 계속 써야되서 바꿈.
if ([2, 5, 8, 0].includes(v)){
//console.log(numbers[i], lc, distance(lc, coo[numbers[i]]), rc, distance(rc, coo[numbers[i]]));
if ( distance(lc, coo[v]) < distance(rc, coo[v]) ){
answer+='L';
lc = coo[v];
}
else if (distance(lc, coo[v]) > distance(rc, coo[v])){
answer+='R';
rc= coo[v];
}
else {
answer+=pri;
if (hand == "left") lc = coo[v];
else rc = coo[v];
}
}
else if ([1, 4, 7].includes(v)){
answer+='L';
lc = coo[v];
}
else{
answer+='R';
rc= coo[v];
}
}
return answer;
}
/*
function solution(numbers, hand) {
let pri = (hand == "left"? 'L' : 'R');
var coo = [[1,0], //해당 번호의 좌표값.
[0, 3], [1, 3], [2, 3],
[0, 2], [1, 2], [2, 2],
[0, 1], [1, 1], [2, 1],
];
var lc = [0,0];
let rc = [2, 0];
var answer = '';
for ( i = 0; i < numbers.length; i++){
if ([2, 5, 8, 0].includes(numbers[i])){
//console.log(numbers[i], lc, distance(lc, coo[numbers[i]]), rc, distance(rc, coo[numbers[i]]));
if ( distance(lc, coo[numbers[i]]) < distance(rc, coo[numbers[i]]) ){
answer+='L';
lc = coo[numbers[i]];
}
else if (distance(lc, coo[numbers[i]]) > distance(rc, coo[numbers[i]])){
answer+='R';
rc= coo[numbers[i]];
}
else {
answer+=pri;
if (hand == "left") lc = coo[numbers[i]];
else rc = coo[numbers[i]];
}
}
else if ([1, 4, 7].includes(numbers[i])){
answer+='L';
lc = coo[numbers[i]];
}
else{
answer+='R';
rc= coo[numbers[i]];
}
}
return answer;
}
*/
//[1차] 다트 게임
function solution(dartResult) { //정규표현식 쓰면 편할려나.
let r = dartResult
const nums = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'];
const bonuses = {S: 1, D: 2, T: 3};
const ops = ['*', '#'];
let scores = [];
score = 0;
bonus ='';
scoreidx = -1;
for (i = 0; i < r.length; i++){
if ( (nums.includes(r[i])) && nums.includes(r[i+1]) ){
score = r[i] + r[i+1]; //score는 숫자변수일텐데 문자인 숫자가 들어가서 알아서 변환이되는건가?
i++;
}
else score = r[i];
i++;
bonus = bonuses[r[i]];
scores.push(Math.pow(score,bonus)); //이때도 보너스 문자형일텐데 알아서 숫자로?
scoreidx++;
if( r[i+1] == '*' ) {
i++;
scores[scoreidx-1] *=2;
scores[scoreidx] *=2;
}
else if ( r[i+1] == '#'){
i++;
scores[scoreidx] *=-1;
}
}
return scores[0]+scores[1]+scores[2];
}
//최댓값과 최솟값
function solution(s) {
let temp = s.split(' ').sort( (a,b)=>a-b); //배열에 있는 '3' 이런 문자로된 숫자도 숫자로 받아들이네. 모르고 걍 한건데. 다른 답보면 Math.max도 문자인 숫자에 그대로 써짐.
console.log(temp);
var answer = '';
return answer+temp[0] +' '+ temp[temp.length-1];
}
/* 숫자의 표현
1 에서 1씩 더해진 수
1+2 에서 2씩 더해진 수
1+2+3 에서 3씩 더해진 수
1+2+3+4 에서 4씩 더해진 수
...
*/
function solution(n) {
count = 0;
for (let i = 1; (i*(i+1))/2<=n; i++){
if ( (n - (i*(i+1))/2) % i == 0) {
count++;
}
}
return count;
}
function solution(board, moves) { //크레인 인형뽑기 게임
let bucket = [];
for (i = 0; i<moves.length; i++){
for( j = 0; j<board.length; j++){
//console.log(j, moves[i]-1, board[j][moves[i]-1] );
if(board[j][moves[i]-1] !=0){
bucket.push(board[j][moves[i]-1]);
board[j][moves[i]-1] = 0;
break;
}
}
}
let count = 0;
for (i = 0; i<bucket.length-1; i++){
//console.log(bucket);
if ( bucket[i] == bucket[i+1]){
count+=2;
bucket.splice(i, 2);
i = -1; //와 for문 끝나면 +1되니까 0말고 -1로 했어야되네 이거때메 몇개만 안풀려서 막혔음.
}
}
return count;
}