자바스크립트 알고리즘 문제풀이
가장 짧은 문자 거리
이건 두 번째 푸는데도 못 풀어서 다시 풀고 정리
function solution(str, t) {
let answer = [];
let p = 1000;
for (let x of str) {
if (x === t) {
p = 0;
answer.push(p);
} else {
p++;
answer.push(p);
}
}
p = 1000;
for (let i = str.length - 1; i >= 0; i--) {
if (str[i] === t) {
p = 0;
} else {
p++;
answer[i] = Math.min(answer[i], p);
}
}
return answer;
}
console.log(solution('teachermode', 'e'));
// [ 1, 0, 1, 2, 1, 0, 1, 2, 2, 1, 0 ]
/*
p=1000, e를 만나면 0 아니면 +1 & answer에 push
------------------------>
t e a c h e r m o d e
[1001|0|1|2|3|0|1|2|3|4|0]
↳ 이것은 자기의 "왼쪽"에 있는 e로부터 떨어진 거리인데
"t"는 왼쪽에 e가 없어서 큰 숫자로 초기화?
"c"는 왼쪽에 있는 e로부터 거리가 2
이제 오른쪽으로부터 떨어진 거리 구하기
첫 번째에 e가 있으니까 바로 p=0 바꾸기 & e가 아니면 ++
<------------------------
t e a c h e r m o d e
[1001|0|1|2|3|0|1|2|3|4|0]
=> [1 |0|1|2|1|0|1|2|2|1|0]
기존 값을 더 작은 값으로 교체
*/
파이썬 알고리즘 문제풀이 입문
1. K 번째 큰 수
function solution(input = '10 3\n13 15 34 23 45 65 33 11 26 42') {
const [_, nums] = input.split('\n');
const [N, K] = _.split(' ');
const arr = nums.split(' ').map(Number);
let set = new Set();
// 각+1해야함 => i=0, j=i+1, k=j+1
for (let i = 0; i < N; i++) {
for (let j = i + 1; j < N; j++) {
for (let k = j + 1; k < N; k++) {
set.add(arr[i] + arr[j] + arr[k]);
}
}
}
// Array.from() 함수는 유사배열객체나 반복가능객체를 얕은 복사하여 새로운 배열을 만듦
// 유사배열객체(array-like object) : length 속성과 index element를 가지는 객체
// 반복가능객체(iterable object) : 배열을 일반화한 객체 ex)Map, Set
return Array.from(set).sort((a, b) => b - a)[K - 1];
}
console.log(solution()); // 143
function solution(input) {
const [first, second] = input.split('\n');
const N = parseInt(first);
const [...scores] = second.split(' ').map((e) => parseInt(e));
const average = Math.round(scores.reduce((acc, cur) => acc + cur) / N);
const diff = [];
for (let i = 0; i < N; i++) {
diff.push(scores[i] - average);
}
const diffAbs = [];
for (let i = 0; i < N; i++) {
diffAbs.push(Math.abs(diff[i]));
}
const minDiffAbs = Math.min(...diffAbs);
// obj = {} # {'12': 36, '22': 34, '32': 36, '42': 34, '52': 36}
const obj = {};
for (let i = 0; i < N; i++) {
if (diffAbs[i] == minDiffAbs) {
obj[i + 1] = scores[i];
}
}
const sortDict = Object.entries(obj).map((e) => parseInt(e[0])); // key값 형변환
// .sort((a,b)=> a[1] - b[1])
// [
// [ 22, 34 ],
// [ 42, 34 ],
// [ 12, 36 ],
// [ 32, 36 ],
// [ 52, 36 ]
// ]
return [average, sortDict[0]].join(' ');
}
const input = `60
25 60 17 60 11 15 27 42 39 31 25 36 32 25 17 45 67 89 24 65 13 34 17 6 11 15 27 42 39 31 25 36 32 25 17 45 67 89 24 65 13 34 17 6 11 15 27 42 39 31 25 36 32 25 17 45 67 89 24 65`;
console.log(solution(input)); // 35 12