내가 하고싶었던 건
1. 배열 내에서 최소값을 찾고
2. 원래 배열에서 그 최소값에 해당하는 값이 걸리면 걔만 빼고 새 배열에 넣어주려고 했다
일단 정답부터!
function solution(arr) {
var answer = [];
// 가장 작은 값을 찾는 로직이 필요하고
// 그 값을 원래 배열에서 뺀 새로운 배열을 반환하는 로직이 필요하다
// 원하는 것만 빼고 나머지를 반환하는 메소드는 splice(인덱스번호, 뺼 갯수) 쓰면 된다
let min = arr[0];
for (let i = 0; i <= arr.length - 1; i++) {
if (arr[i] < min) {
min = arr[i];
}
}
let cnt = 0;
for (let i = 0; i <= arr.length -1; i++) {
if (arr[i] === min) {
continue;
}
answer[cnt++] = arr[i];
}
if (arr.length === 1) {
answer = [-1];
}
return answer;
}
틀린 코드
function solution(arr) {
var answer = [];
let min = 0;
arr.sort((a,b) => b-a);
for (let i = 0; i < arr.length - 1; i++) {
let min = arr[0];
answer[i] = arr[i];
if (min > arr[i]) {
min = arr[i];
continue;
}
}
if (arr.length === 1) {
answer = [-1];
}
return answer;
}
min을 설정하고 싶은데 자꾸 초기값으로 나왔다. for문 안에서 return도 써봤는데 오히려 되지 않았다.
-> min에 '대입'을 하는거니까 등호가 한개여야 한다. 등호 세개도 써봤는데 한개였다. return문은 필요 없었다.
새로운 배열값을 answer에 집어넣으려는 식이 잘 먹히지 않았다.
-> splice를 쓰려고 했는데 원하는 대로 작동시키는 법을 모르겠어서, 별도의 for문을 돌리는 방법을 썼다.
사실 이 문제는 도무지 해법을 모르겠어서 항해때 JAVA로 작성한 코드를 참고했다. 놀라운건 그래도 모르겠더라.
내 for문들은 왜 원하는 인덱스에서 한칸씩 더 모자라지?
-> 등호를 붙이니까 해결됐다. 근데 왜 등호를 붙여야 할까? 얘는 끝 인덱스까지 다 돌아줘야 해서 그런가보다.
지우지 말고 주석처리 할걸 그랬나? 코드는 거의 같다.
attack(target) {
const damage = Math.round(Math.random() * 10);
target.hp -= damage;
return console.log(chalk.redBright(`${damage} 만큼의 공격!`));
}
이것이 예전 코드고 (return 때문일까? 동작은 하지 않았다. 하지만 이건 console.log의 문제란게 밝혀진다.)
현재 코드.
자바스크립트는 성능이 크게 뛰어난 언어라기 보단 만드는데 편히 만들려고 생긴 언어다 보니까, 꼭 추천도서가 있다기 보단 많이 만들어보는게 중요한 언어다. 다른 언어랑은 다르게 잘 몰라도 일단 써볼 수 있는 언어라서 많이 써보는 것이 중요.
우리가 어떤 대상을 기다리고 싶다면 함수 안에서만 기다릴게 아니라, 얘를 호출하는 애들이 기다려줘야 한다는 것
sleep을 구현할때 promise와 setTimeout을 일반적으로 쓴다.
Promise는 기본적으로 resolve가 호출될때까지 기다린다.
그냥 setTimeout만 쓰면 걔는 지멋대로 타이머 큐에 들어가는게 맞는데, 걔를 Promise 객체로 감싸주면 delay 함수를 구현하는 것 처럼 기다려주는 것
resolve => setTimeout(resolver, sec * 1000) 를 하면 Node가 보장해주는 건 '최소한 1초 지날 때 까지는 실행을 안 할거다' 라는거지, '정확히 1초 뒤에 실행한다' 라는 얘기가 아니다!