Map 객체 (new Map() 생성자는 Map 객체를 생성한다.)
: 키-값 쌍을 저장하며 각 쌍의 삽입 순서를 기억하는 콜렉션이다.
filter 혹은 forEach와 같은 구문이며, 반복적인 일을 할 때 사용한다.
이 블로그에 잘 정리되어 있어서 까먹었을 때 참고하면 좋을 듯 하다.
.set()
: 중복되는 값을 가지지 않는 값들의 리스트이다. 값의 순서가 없기 때문에 인덱스를 가지지 않는다.
.indexOf()
: (array) 배열에서 지정된 요소가 위치하는 첫번째 인덱스를 반환한다. (배열에 지정된 요소가 존재하지 않으면, -1을 반환한다.)
: (string) 호출한 String 객체에서 주어진 값과 일치하는 첫 번째 인덱스를 반환한다. (일치하는 값이 없으면, -1을 반환한다.)
.innerFunction().innerFunction2()
: 내장함수 여러개를 붙일때는 이처럼 닫음괄호뒤에 점을 붙여 이어주면 된다.
.count()
: console.count() 형식으로 콘솔을 붙여서만 쓸 수 있는 듯 하다.
count한 값을 별도로 return하고 싶었는데, 아직 방법을 잘 모르겠다.
.sort()
: 배열을 순서대로 정렬해준다.
단, string 전용 메소드이기 때문에, 숫자 오름차 순 정렬이 필요할 시 별도의 추가 입력이 필요하다.
//숫자 오름차 순 위한 추가 입력
(function(a, b) {
return a - b;
});
또한, 어느 위치에서 .sort()를 입력하건, 코드 전역에 영향을 준다. (즉, 모든 곳에서 해당 배열 순서를 정렬한다.)
const pets = ['cat', 'dog', 'bat'];
console.log(pets.includes('cat'));
// expected output: true
console.log(pets.includes('at'));
// expected output: false
var a = prompt() 를 통해 입력받은 문자를 .split()으로 나눴을 때,
typeof(a)를 콘솔에 로그하면, object라고 나타난다.
나는 배열 형태로 저장되었을 거라고 생각했는데 아니었다!
parseInt()
: 첫번째 인자만 문자열에서 숫자열로 바꿔주기 때문에, 배열 전체의 타입을 바꿔주지 않는다.
확실히 어제 꼼꼼히 복습을 하고 나니, 오늘은 문제 풀 때 이런저런 메소드가 잘 생각났다.
위코드가 개강한 후에 더 잘 기억날 수 있도록 미리 더 익혀놔야겠다.
사실 이 문제는 끝까지 못 풀어서 결국 답안을 봤다...
나는 if (parseInt(a[i]) === parseInt(c[i]))
이런 식으로 parseInt를 써서
동일한 인덱스의 숫자값이 같은지 다른지를 기준으로 검사를 하려고 했다.
또한, a.sort((x, y) => (x - y));
처럼 a.sort를 하니까
코드 전역에 있는 모든 a가 오름차순으로 정렬이 되어버렸다.
따라서 if 문을 돌려도 모든 숫자가 다 똑같을 수밖에 없었다.
(수정* sorted=unsorted.sort도 같은 내용인데, 왜 unsorted가 정렬되지 않았을까?? )
일단 답은 아래와 같다.
const unsorted = prompt('키를 입력하세요');
let sorted = "";
sorted = unsorted
.split(" ")
.sort(function(a, b) {
return a - b;
})
.join(" ");
if (unsorted === sorted) {
console.log("Yes");
} else {
console.log("No");
}
답은 parseInt를 쓰고 있지 않다.
다만 sorted와 unsorted가 같은 포맷일 때, 내용이 같은지 다른지만 보고 있다.
휴... 못풀어서 너무 아쉽지만 1시간 반동안 붙잡고 있었으니 내 나름대로 최선을 다했다고 보고 넘어가려 한다.
입력: '원범 원범 혜원 혜원 혜원 혜원 유진 유진'
출력: 혜원(이)가 총 4표로 반장이 되었습니다.
const vote = '원범 원범 혜원 혜원 혜원 혜원 유진 유진'.split(' ');
// {'이름': 투표수} 형식으로 딕셔너리 생성
let counts = {};
for (let i=0; i<vote.length; i++) {
let num = vote[i];
// ? 앞은 if 조건 / ? 뒤는 if 실행 / : 뒤는 else 실행
counts[num] = counts[num] ? counts[num] + 1 : 1;
}
// value 값만 추출해서 정렬
const countsValue = Object.values(counts); countsValue.sort();
const theBiggestValue = countsValue[countsValue.length-1] // 4
let elected = "" // 혜원
for (let key in counts) {
if (theBiggestValue === counts[key]) {
elected += key
}
}
console.log(`${elected}(이)가 총 ${theBiggestValue}표로 반장이 되었습니다.`)
와우... 한 시간 동안 매달려서 끝내 풀었다.
입력: 97 86 75 66 55 97 85 97 97 95
출력: 6
const score = '97 86 75 66 55 97 85 97 97 95'
.split(' ')
.sort((x, y) => (y - x));
const score2 = new Set(score); // 우선 중복 없애기
const arrayed = [...score2]; // Set을 배열화 하기
const highscore = arrayed.slice(0, 3); // 1~3등 점수만 추출
let howMany = 0;
for (let i=0; i<score.length; i++) {
if (score[i] >= highscore[highscore.length-1]) {
howMany += 1
}
}
console.log(howMany);
와우 이것도 한 시간이 걸렸다.
가장 시간을 잡아먹은 이유는 내가 뭔가 기억은 나는데 확실하게 기억나지 않아서 이것저것 시도해보며 아주 작은 오류들을 내기 때문이었다.
그래도 예전보다 문제를 풀어가는데 끈기가 생긴 것 같아 좋았다.
const wrongSent = prompt('q가 포함된 문장을 작성해주세요');
console.log(wrongSent.replaceAll('q', 'e'));
입력
50 // 제한무게
5 // 친구 수 (n)
20 // 몸무게 (무작위)
20
20
20
20
출력
2
.....................
체력적으로 힘드니까 머리를 쓰지 않고 몸빵을 하려고 하게 된다...
이 문제는 솔직히 어떻게 접근해야하는지, 출제자의 의도가 뭔지조차 유추하기가 어렵다.
내일 답을 보고 더 배우는 편이 나을 것 같다.
오늘은 여기까지.