js algorithm - Lee-hyuna/33-js-concepts-kr GitHub Wiki
JS: μκ³ λ¦¬μ¦ μΈν°λ·°
μλ¬Έ: JS: Interview Algorithm
1. μμ κ²μ¬
μ§λ¬Έ : μμλ₯Ό μ΄λ»κ² νμΈ ν κ²μΈκ°?
λ΅ : μμλ 1κ³Ό 1λ‘λ§ λλ μ μλ€. λ°λΌμ while 루νλ₯Ό μ€ννκ³ 1μ© μ¦κ°μν¨λ€. (μ½λ μμ λ₯Ό μ°Έκ³ . μ΄ν΄κ° μλλ©΄ μλ° μ€ν¬λ¦½νΈ κΈ°λ³Έ μ¬νμ λ°°μμΌνλ€.)
function isPrime(n){
var divisor = 2;
while (n > divisor){
if(n % divisor == 0) {
return false;
} else
divisor++;
}
return true;
}
> isPrime(137); // true
> isPrime(237); // false
λ©΄μ κ΄ : λ λμ λ°©λ²μ μλ?
λ΅λ³: λλμλ ν λ²μ 1 μ© μ¦κ°νλ€. 3 μ΄νμ 2λ₯Ό μ¦κ°μν¬ μ μλ€. μ«μκ° μ§μλ‘ λλ μ μμΌλ©΄ 2λ‘ λλ μ μλ€.
μΆκ° : μ μλ₯Ό μ«μκΉμ§ λ릴 νμκ°μλ κ²½μ°. ν¨μ¬ μΌμ° λ©μΆ μ μλ€.
2. μμΈμ (μΈμ μ€μ μμμΈ μ)
μ§λ¬Έ : μ«μμ λͺ¨λ μμΈμμ΄λ»κ² μ°Ύμ μ μλ?
λ΅ : while 루νλ₯Ό μ€ννμ. 2λ‘ λλκΈ° μμνκ³ λλ μμλ κ²½μ° urκ° λμ¬ λκΉμ§ λλμλ₯Ό λλ¦°λ€.
function primeFactors(n){
var factors = [],
divisor = 2;
while(n>2){
if(n % divisor == 0){
factors.push(divisor);
n= n/ divisor;
} else {
divisor++;
}
}
return factors;
}
> primeFactors(69); // [3, 23]
λ©΄μ κ΄ : λ°νμ 볡μ‘μ±μ 무μμΈκ°? μ΄κ²μ λ μ’κ² λ§λ€ μ μλ?
λ΅λ³: μ΄κ²μ O (n)μ λλ€. λλμκ° 3μμ λΆν° 2λ‘ λλ μ§λ λλμλ‘ μ¦κ°ν μ μλ€. μ«μκ° μ§μλ‘ λλ μ μμΌλ©΄ 2λ‘ λλ μ μκΈ° λλ¬Έμ μ§μλ‘ λλ νμκ° μμ΅λλ€. κ²λ€κ°, κ·Έ κ°μΉμ μ λ°λ³΄λ€ ν° μΈμλ₯Ό κ°μ§μ§ μμ κ²μ΄λ€. 볡μ‘ν κ°λ μ μνλ€λ©΄ 볡μ‘ν κ°λ μΌλ‘ μ¬μ©νλΌ
3. νΌλ³΄λμΉ
μ§λ¬Έ : n λ²μ§Έ νΌλ³΄λμΉ μ«μλ μ΄λ»κ² μ»λκ°?
λ΅ : λ°°μ΄μ λ§λ€κ³ λ°λ³΅λΆν° μμνλ€.
νΌλ³΄λμΉ μμ΄μ μ μ μκ² κ°μ₯ μΈκΈ°μλ μΈν°λ·° μ§λ¬Έ μ€ νλμ΄λ€. λ°λΌμ μμμΌνλ€.
μλ 1
function fibonacci(n){
var fibo = [0, 1];
if (n <= 2) return 1;
for (var i = 2; i <=n; i++ ){
fibo[i] = fibo[i-1] + fibo[i-2];
}
return fibo[n];
}
> fibonacci(12);
= 144
λ©΄μ κ΄ : λ° νμ 볡μ‘λλ μ΄λ»κ² λλ?
λ΅λ³: O (n)
λ©΄μ κ΄ : μ¬κ· μ μΌλ‘ λ§λ€ μ μλ?
μλ 2
function fibonacci(n){
if(n<=1)
return n;
else
return fibonacci(n-1) + fibonacci (n-2);
}
> fibonacci(12);
= 144
λ©΄μ κ΄ : λ°νμ 볡μ‘λλ μ΄λ»κ² λλ?
λ΅λ³: O (2 n ). 볡μ‘μ±μ λν μΈλΆ μ¬ν
4. μ΅λ 곡μ½μ
μ§λ¬Έ : λ μ«μμ μ΅λ 곡μ½μλ₯Ό μ΄λ»κ² μ°Ύμ μ μλ?
function greatestCommonDivisor(a, b){
var divisor = 2,
greatestDivisor = 1;
//if u pass a -ve number this will not work. fix it dude!!
if (a < 2 || b < 2)
return 1;
while(a >= divisor && b >= divisor){
if(a %divisor == 0 && b% divisor ==0){
greatestDivisor = divisor;
}
divisor++;
}
return greatestDivisor;
}
> greatestCommonDivisor(14, 21);
=7
> greatestCommonDivisor(69, 169);
= 1
λ©μ§ μκ³ λ¦¬μ¦
λ―Έμνλ€. μ€λͺ ν μ μλ€. λ μμ λ 80% μ λ μ΄ν΄νμ§ λͺ»νκΈ° λλ¬Έμ... μκ³ λ¦¬μ¦ λΆμ κ°μ¬κ° μ΄κ²μ λν΄ λ§ν΄μ κ·Έλ₯ μ΄κ±°λ€.
function greatestCommonDivisor(a, b){
if(b == 0)
return a;
else
return greatestCommonDivisor(b, a%b);
}
μ°Έκ³ : λλ₯Ό μ¬μ©νμ¬ μ΄ν΄ν΄λΌ.
5. μ€λ³΅ μ κ±°
μ§λ¬Έ : λ°°μ΄μμ μ€λ³΅ μμλ₯Ό μ΄λ»κ² μ κ±° ν κ²μΈκ°?
λ΅λ³ : λ°λ³΅ 루νλ₯Ό μμνκ³ κ°μ²΄ / κ΄λ ¨ λ°°μ΄μ μ μ§ν©λλ€. μ²μμΌλ‘ μμλ₯Ό μ°ΎμΌλ©΄ κ·Έ κ°μ trueλ‘ νλ€.(μμκ° ν λ² μΆκ°λμμμ λ €μ€λ€). μ‘΄μ¬νλ κ°μ²΄μμ μμλ₯Ό μ°ΎμΌλ©΄ λ°ν λ°°μ΄μ μ½μ νμ§ μλλ€.
function removeDuplicate(arr){
var exists ={},
outArr = [],
elm;
for(var i =0; i<arr.length; i++){
elm = arr[i];
if(!exists[elm]){
outArr.push(elm);
exists[elm] = true;
}
}
return outArr;
}
> removeDuplicate([1,3,3,3,1,5,6,7,8,1]);
= [1, 3, 5, 6, 7, 8]
6. μ λ ¬ λ λ λ°°μ΄μ λ³ν©
μ§λ¬Έ : λ κ°μ μ λ ¬ λ λ°°μ΄μ μ΄λ»κ² λ³ν© ν κ²μΈκ°?
λ΅ : κ° λ°°μ΄μ λν ν¬μΈν°λ₯Ό μ μ§(μ½λλ₯Ό μ½κ³ μ΄κ²μ μ£ΌμνλΌ)
function mergeSortedArray(a, b){
var merged = [],
aElm = a[0],
bElm = b[0],
i = 1,
j = 1;
if(a.length ==0)
return b;
if(b.length ==0)
return a;
/*
if aElm or bElm exists we will insert to merged array
(will go inside while loop)
to insert: aElm exists and bElm doesn't exists
or both exists and aElm < bElm
this is the critical part of the example
*/
while(aElm || bElm){
if((aElm && !bElm) || aElm < bElm){
merged.push(aElm);
aElm = a[i++];
}
else {
merged.push(bElm);
bElm = b[j++];
}
}
return merged;
}
> mergeSortedArray([2,5,6,9], [1,2,3,29]);
= [1, 2, 2, 3, 5, 6, 9, 29]
7. μμ λ³μ μλ μ«μ κ΅μ²΄νκΈ°
μ§λ¬Έ : μμ λ³μλ₯Ό μ¬μ©νμ§ μκ³ λ μ«μλ₯Ό μ΄λ»κ² λ°κΏκ² μΈκ°?
λ΅ : μκ°νλ κ² μ²λΌ μκ°μ λμ΄λΌ. λ΅μ μκ³ μμ§λ§ μκ°νλ κ²μ²λΌ νλνκ³ λ΅λ³μ μκ°μ λ΄λΌ.
function swapNumb(a, b){
console.log('before swap: ','a: ', a, 'b: ', b);
b = b - a;
a = a + b;
b = a - b;
console.log('after swap: ','a: ', a, 'b: ', b);
}
> swapNumb(2, 3);
= before swap: a: 2 b: 3
= after swap: a: 3 b: 2
λΉνΈ μ‘°μ : λ―Έμν΄. μ€λͺ ν μ μλ€. Kinjal Daveλμ΄ λ₯Ό μ΄ν΄νκΈ°μν λ Όλ¦¬μ μ°κ²° μ μ μ νλ€.
function swapNumb(a, b){
console.log("a: " + a + " and b: " + b);
a = a ^ b;
b = a ^ b;
a = a ^ b;
console.log("a: " + a + " and b: " + b);
}
> swapNumb(2, 3);
= a: 2 and b: 3
= a: 3 and b: 2
8. λ¬Έμμ΄ λ€μ§κΈ°
μ§λ¬Έ : λ¬Έμμ΄μ μ΄λ»κ² λ€μ§μ κ²μΈκ°?
λ΅ : λ¬Έμμ΄μ λ°λ³΅νκ³ λ¬Έμλ₯Ό μ λ¬Έμμ΄λ‘ μ°κ²°νλ©΄ λλ€.
μλ 1
function reverse(str){
var rtnStr = '';
for(var i = str.length-1; i>=0;i--){
rtnStr += str[i];
}
return rtnStr;
}
> reverse('you are a nice dude');
= "edud ecin a era uoy"
λ©΄μ κ΄ : μ΅μ λΈλΌμ°μ μμλ μ λ¬ν λ°©μμ΄ μ λμνμ§λ§ IE8κ³Ό κ°μ μ€λλ λΈλΌμ°μ μμλ λ리λ€. λ€λ₯Έ λ°©λ²μ΄ μλκ°?
**λ΅ : ** λ¬Όλ‘ μ΄λ€. λ°°μ΄μ μ¬μ©ν΄ κ²μ¬λ₯Ό μΆκ° ν μ μλ€. λ¬Έμμ΄μ΄ nullμ΄κ±°λ λ¬Έμμ΄μ΄ μλ κ²½μ° μ€ν¨νλ€. νμ 체ν¬λ νλ€. μ΄ λ°°μ΄μ μ¬μ©νλ κ²μ μΌλΆ μλ² μΈ‘ μΈμ΄μμ λ¬Έμμ΄ λ²νΌλ₯Ό μ¬μ©νλ κ²κ³Ό κ°λ€.
μλ 2
function reverse(str){
var rtnStr = [];
if(!str || typeof str != 'string' || str.length < 2 ) return str;
for(var i = str.length-1; i>=0;i--){
rtnStr.push(str[i]);
}
return rtnStr.join('');
}
λ©΄μ κ΄ : λ°νμ 볡μ‘λλ μ΄λ»κ² λλ?
λ΅λ³: O (n)
λ©΄μ κ΄ : λ κ°μ μ΄ κ°λ₯νκ°?
λ΅λ³: μμΈμ μ λ°μ λ°λ³΅ νλ©΄ μ‘°κΈ μ μ½ ν μ μμ κ²μ΄λ€.
3 λ² μλ
function reverse(str) {
str = str.split('');
var len = str.length,
halfIndex = Math.floor(len / 2) - 1,
revStr;
for (var i = 0; i <= halfIndex; i++) {
revStr = str[len - i - 1];
str[len - i - 1] = str[i];
str[i] = revStr;
}
return str.join('');
}
λ©΄μ κ΄ : μ΄ κ²μ ν¨κ³Όκ° μμ§λ§ μ¬κ· μ μΌλ‘ κ°λ₯νκ°?
**λ΅λ³: ** λ¬Όλ‘ μ΄λ€.
4 λ² μλ
function reverse (str) {
if (str === "") {
return "";
} else {
return reverse(str.substr(1)) + str.charAt(0);
}
}
5 λ² μλ
λ©΄μ κ΄ : μ’ λ κΉλνκ² ν μ μλ?
λ΅λ³: μ.
function reverse(str){
if(!str || str.length <2) return str;
return str.split('').reverse().join('');
}
6 λ² μλ
μ§λ¬Έ : λ¬Έμμ΄ νμ₯μΌλ‘ 리λ²μ€ ν¨μλ₯Ό λ§λ€ μ μλ?
λ΅λ³ : μ΄ ν¨μλ₯Ό String.prototypeμ μΆκ°ν΄μΌνκ³ strμ λ§€κ° λ³μλ‘ μ¬μ©νλ€.
String.prototype.reverse = function (){
if(!this || this.length <2) return this;
return this.split('').reverse().join('');
}
> 'abc'.reverse();
= 'cba'
9. λ¨μ΄ λ€μ§κΈ°
μ§λ¬Έ : λ¬Έμ₯μμ λ¨μ΄λ₯Ό μ΄λ»κ² λ€μ§μ κ²μΈκ°?
λ΅ : κ³΅λ°±μ΄ μ¬λ¬ κ° μλ νμΈνλ€.
//have a tailing white space
//fix this later
//now i m sleepy
function reverseWords(str){
var rev = [],
wordLen = 0;
for(var i = str.length-1; i>=0; i--){
if(str[i]==' ' || i==0){
rev.push(str.substr(i,wordLen+1));
wordLen = 0;
}
else
wordLen++;
}
return rev.join(' ');
}
λ΄μ₯ λ©μλλ₯Ό μ΄μ©ν λΉ λ₯Έ μ루μ :
function reverseWords(str){
return str.split(' ').reverse();
}
10. μμΉ λ€μ§κΈ°
μ§λ¬Έ : "I am the good boy""μ κ°μ λ¬Έμ₯μ΄ μλ€λ©΄. "I ma eht doog yob"μ μ΄λ»κ² λ§λ€ μ μλ? λ¨μ΄λ μ μ리μ μμ§λ§ λ€μ§μ μνμ΄λ€.
λ΅ : μ΄λ κ² νλ €λ©΄ λ¬Έμμ΄ λ°μ κ³Ό λ¨μ΄ λ°μ μ λͺ¨λ μνν΄μΌ νλ€.
function reverseInPlace(str){
return str.split(' ').reverse().join(' ').split('').reverse().join('');
}
> reverseInPlace('I am the good boy');
= "I ma eht doog yob"
λ©΄μ κ΄ : μ’λ€. reverse() λ©μλλ₯Ό μ¬μ©νμ§ μκ³ ν μ μλ?
λ΅λ³: λλΌκ΅¬μ?
//sum two methods.
//you can simply split words by ' '
//and for each words, call reverse function
//put reverse in a separate function
//if u cant do this,
//have a glass of water, and sleep
11. 첫 λ²μ§Έ λΉ λ°λ³΅ λ¬Έμ
μ§λ¬Έ : λ¬Έμμ΄μμ 첫 λ²μ§Έ λΉ λ°λ³΅ λ¬Έμλ₯Ό μ΄λ»κ² μ°Ύμ μ μλ?
λ΅λ³ : μ‘°κ±΄μ΄ μ’ λ νμνλ€.
μ€λͺ : λμλ¬Έμλ₯Ό ꡬλΆν©λκΉ?
λ©΄μ κ΄ : λ©΄μ κ΄μ κ±°μ ν μ μλ€.
λ΅λ³ : λ§€μ° κΈ΄ λ¬Έμμ΄μΈκ°? μλλ©΄ λͺ λ°±μ€μΈκ°?
λ©΄μ κ΄ : μ μ€μνκ°?
**λ΅λ³ :**μλ₯Ό λ€μ΄, λ§μ½ κ·Έκ²μ΄ λ§€μ° κΈ΄ λ¬Έμμ΄μ΄λΌλ©΄ λ°±λ§μλ₯Ό λ§νκ³ , 26κ°μ μμ΄ λ¬Έμκ° λ°λ³΅λκ³ μλμ§ νμΈνκ³ μΆλ€. μ 체 λ¬Έμμ΄μ μννλ κ² μΈμ λͺ¨λ λ¬Έμκ° 200μλ§λ€ μ€λ³΅λλμ§ μ¬λΆλ₯Ό νμΈν μ μλ€. μ΄λ κ² νλ©΄ κ³μ° μκ°μ΄ μ μ½λλ€.
λ©΄μ κ΄ : λ¬Έμ₯μ "the quick brown fox jumps then quickly blow air" μ΄κ±°λ€.
function firstNonRepeatChar(str){
var len = str.length,
char,
charCount = {};
for(var i =0; i<len; i++){
char = str[i];
if(charCount[char]){
charCount[char]++;
}
else
charCount[char] = 1;
}
for (var j in charCount){
if (charCount[j]==1)
return j;
}
}
>firstNonRepeatChar('the quick brown fox jumps then quickly blow air');
= "f"
μ°Έκ³ : μ΄κ²μ νλμ λ¬Έμ κ° μλ€. for 루νκ° μμλλ‘ μ€νλλ€λ 보μ₯μ μλ€.
12. μ€λ³΅ λ¬Έμλ₯Ό μ κ±°
μ§λ¬Έ : λ¬Έμμ΄μμ μ€λ³΅ λ¬Έμλ₯Ό μ΄λ»κ² μ κ±°νλκ°?
λ΅λ³: μ΄κ²μ 첫 λ²μ§Έ λΉ λ°λ³΅ λ¬Έμμ λ§€μ° μ μ¬νλ€. λΉμ·ν μ§λ¬Έμ νλ©΄λλ€. λμλ¬Έμλ₯Ό ꡬλΆνλκ°?
λμλ¬Έμλ₯Ό ꡬλΆνλ©΄ λ μ¬μμ§λ€. ꡬλΆνμ§ μλλ€λ©΄. string.toLowercase()λ₯Ό μ¬μ©νμ¬ μ 체 λ¬Έμμ΄μ λ³νν μ μλ€. κ·Έλ¬λ κ·Έκ²μ μ’μνμ§ μμ μλ μμ΅λλ€. λ¦¬ν΄ λ¬Έμμ΄μ΄ κ°μ κ²°κ³Όλ₯Ό λ΄μ§ μκΈ° λλ¬Έμ΄λ€. κ·Έλμ
function removeDuplicateChar(str){
var len = str.length,
char,
charCount = {},
newStr = [];
for(var i =0; i<len; i++){
char = str[i];
if(charCount[char]){
charCount[char]++;
}
else
charCount[char] = 1;
}
for (var j in charCount){
if (charCount[j]==1)
newStr.push(j);
}
return newStr.join('');
}
> removeDuplicateChar('Learn more javascript dude');
= "Lnmojvsciptu"
μ°Έκ³ : μ΄κ²μ νλμ λ¬Έμ κ° μλ€. for 루νκ° μμλλ‘ μ€νλλ€λ 보μ₯μ μλ€.
13. νλ¬Έ(palindrome) νμΈ
μ§λ¬Έ : λ¨μ΄κ° νλ¬ΈμΈ κ²μ μ΄λ»κ² νμΈ ν κ²μΈκ°?
λ΅ : λ¨μ΄λ₯Ό λ€μ§μ΄ μ΄μ λ¨μ΄μ λμΌνλ©΄ νλ¬Έμ΄λΌ νλ€.
function isPalindrome(str){
var i, len = str.length;
for(i =0; i<len/2; i++){
if (str[i]!== str[len -1 -i])
return false;
}
return true;
}
> isPalindrome('madam')
= true
> isPalindrome('toyota')
= false
λλ λ΄μ₯ λ©μλλ₯Ό μ¬μ©ν μ μλ€.
function checkPalindrom(str) {
return str == str.split('').reverse().join('');
}
μ μ¬ : λ¬Έμμ΄ O (n)μ΄ μκ°μ μ°μ νλ¬Έ λ¬Έμμ΄μ΄ λ€μ΄ μλμ§ μ¬λΆλ₯Ό μ°Ύλλ€. O (1) μκ° μμ λ¬Έμ λ₯Ό ν΄κ²°ν μ μμκΉ?
14. 5μμ 7 μ¬μ΄μ μμμ μ
μ§λ¬Έ : 1μμ 5 μ¬μ΄μ λμλ₯Ό μμ±νλ ν¨μκ° μλ€λ©΄ κ·Έ ν¨μλ₯Ό μ¬μ©νμ¬ μ΄λ»κ² λμλ₯Ό 1μμ 7κΉμ§ μμ± ν μ μμκΉ?
λ΅ : λ§€μ° κ°λ¨νλ€. κΈ°λ³Έμ μΈ μ°μ μ μκ°νλ©΄ μ»μ μ μλ€.
function rand5(){
return 1 + Math.random() * 4;
}
function rand7(){
return 5 + rand5() / 5 * 2;
}
15. λΉ μ§ λ²νΈ μ°ΎκΈ°
μ§λ¬Έ : νλμ μ«μλ₯Ό μ μΈνκ³ 1μμ 100κΉμ§μ μ λ ¬λμ§ μμ λ°°μ΄μμ λΉ μ§ μ«μλ₯Ό μ΄λ»κ² μ°Ύμ μ μμκΉ?
μ€λͺ : λ°°μ΄μ 1-100μ μ«μ λ°°μ΄μ΄ μλ€. λ°°μ΄μμ νλμ μ«μλ§ λλ½λμλ€. λ°°μ΄μ μ λ ¬λμ§ μμλ€. λΉ μ§ μ«μλ₯Ό μ°ΎμλΌ.
λ΅ : μκ°μ λ§μ΄ νλ κ²μ²λΌ νλν΄μΌνλ€. κ·Έλ° λ€μ μ«μ n = n * (n + 1) / 2μ ν©μ λν΄ μ΄μΌκΈ° νλ€.
function missingNumber(arr){
var n = arr.length+1,
sum = 0,
expectedSum = n* (n+1)/2;
for(var i = 0, len = arr.length; i < len; i++){
sum += arr[i];
}
return expectedSum - sum;
}
> missingNumber([5, 2, 6, 1, 3]);
= 4
16. 2μ ν©
μ§λ¬Έ : μ λ ¬λμ§ μμ λ°°μ΄μμ μ£Όμ΄μ§ μ«μμ ν΄λΉνλ λ κ°μ μ«μκ° μλμ§ νμΈνλΌ.
λ΅ : μΈμμμ κ°μ₯ κ°λ¨ν κ². μ΄μ€λ£¨νλ₯Ό μ΄μ©νλ€.
function sumFinder(arr, sum){
var len = arr.length;
for(var i =0; i<len-1; i++){
for(var j = i+1;j<len; j++){
if (arr[i] + arr[j] == sum)
return true;
}
}
return false;
}
> sumFinder([6,4,3,2,1,7], 9);
= true
> sumFinder([6,4,3,2,1,7], 2);
= false
λ©΄μ κ΄ : μ΄ ν¨μμ μκ° λ³΅μ‘λλ 무μμΈκ°
λ΅λ³: O (n 2 )
λ©΄μ κ΄ : λ μ λ§λ€ μ μλ?
λ΅λ³: ν©κ³μ μμμ μ°¨μ΄λ₯Ό μ μ₯ν κ°μ²΄λ₯Ό κ°μ§ μ μλ€. κ·Έλ° λ€μ μ μμμ λλ¬νμ λ μ°¨μ΄κ° κ°μ²΄λΌλ κ²μ μλ©΄ μνλ ν©κ³κΉμ§ ν©μ΄ λλ μμ΄ μλ€.
μλ 2
function sumFinder(arr, sum){
var differ = {},
len = arr.length,
substract;
for(var i =0; i<len; i++){
substract = sum - arr[i];
if(differ[substract])
return true;
else
differ[arr[i]] = true;
}
return false;
}
> sumFinder([6,4,3,2,1,7], 9);
= true
> sumFinder([6,4,3,2,1,7], 2);
= false
λΉμ·ν λ¬Έμ : λ°°μ΄ μμ λ μ«μμ μ΅λμ°¨μ΄ λ₯Ό μ°ΎμλΌ
17. κ°μ₯ ν° ν©κ³
μ§λ¬Έ : λ μμ μ€ κ°μ₯ ν° ν©κ³λ₯Ό μ΄λ»κ² μ°Ύμ μ μλ?
λ΅ : λ§€μ° κ°λ¨νλ€. λ κ°μ κ°μ₯ ν° μ«μλ₯Ό μ°Ύμμ κ·Έ ν©κ³λ₯Ό λ°ννλ©΄ λλ€.
function topSum(arr){
var biggest = arr[0],
second = arr[1],
len = arr.length,
i = 2;
if (len<2) return null;
if (biggest<second){
biggest = arr[1];
second = arr[0];
}
for(; i<len; i++){
if(arr[i] > biggest){
second = biggest;
biggest = arr[i];
}
else if (arr[i]>second){
second = arr[i];
}
}
return biggest + second;
}
18. 0 μΈκΈ°
μ§λ¬Έ : 1 μμ nκΉμ§μ μ΄ 0μ κ°―μλ?
λ΅ : n = 50 μΈ κ²½μ° 0μ μλ 11 (0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100)μ΄λ€. 100μλ λ κ°μ 0μ΄ μμ΅λλ€. μ΄κ²μ κ°λ¨νμ§λ§ μ‘°κΈ κΉλ€λ‘μ 보μΈλ€.
μ€λͺ : 1μμ 50κΉμ§μ μ«μκ° μμΌλ©΄ κ°μ 5μ λλ€. 50μ 10μΌλ‘ λλ κ°μ λλ€. κ·Έλ¬λ κ°μ΄ 100μ΄λ©΄ κ°μ 11μ λλ€. 100/10 = 10 λ° 10/10μ΄ λλ€. κ·Έκ²μ΄ (100, 200, 1000)κ³Ό κ°μ νλμ μ«μλ‘ λ λ§μ 0μ μ»λ λ°©λ²μ΄λ€.
function countZero(n){
var count = 0;
while(n>0){
count += Math.floor(n/10);
n = n/10;
}
return count;
}
> countZero(2014);
= 223
19. subString
μ§λ¬Έ : λ¬Έμμ΄μ λΆλΆ λ¬Έμμ΄μ μ΄λ»κ² μΌμΉμν¬ μ μλ?
λ΅λ³ : λ¬Έμμ΄μ λ°λ³΅νλ λμ ν¬μΈν° (λ¬Έμμ΄κ³Ό νμ λ¬Έμμ΄μ λν ν¬μΈν°)λ₯Ό μ¬μ©νλ€. κ·Έλ¦¬κ³ μ΄κΈ° μΌμΉμ μμ μμΈμ 보μ ν λ€λ₯Έ λ³μκ° μλ€.
function subStringFinder(str, subStr){
var idx = 0,
i = 0,
j = 0,
len = str.length,
subLen = subStr.length;
for(; i<len; i++){
if(str[i] == subStr[j])
j++;
else
j = 0;
//check starting point or a match
if(j == 0)
idx = i;
else if (j == subLen)
return idx;
}
return -1;
}
> subStringFinder('abbcdabbbbbck', 'ab')
= 0
> subStringFinder('abbcdabbbbbck', 'bck')
= 9
//doesn't work for this one.
> subStringFinder('abbcdabbbbbck', 'bbbck')
= -1
μ§λ¬Έ : λ§μ§λ§ λ¬Έμ λ₯Ό μ΄λ»κ² ν΄κ²°ν μ μλ?
λ΅ : μ§μ ν΄λ΄λΌ..
20. μμ΄
μ§λ¬Έ : λ¬Έμμ΄μ λͺ¨λ μμ΄μ μ΄λ»κ² λ§λ€ κ²μΈκ°?
λ΅ : μ΄κ²μ μκ³ λ¦¬μ¦μ λν μ§μ μμ€μ λ°λΌ μ΄λ €μ΄ μΌμΌ μ μλ€.
function permutations(str){
var arr = str.split(''),
len = arr.length,
perms = [],
rest,
picked,
restPerms,
next;
if (len == 0)
return [str];
for (var i=0; i<len; i++)
{
rest = Object.create(arr);
picked = rest.splice(i, 1);
restPerms = permutations(rest.join(''));
for (var j=0, jLen = restPerms.length; j< jLen; j++)
{
next = picked.concat(restPerms[j]);
perms.push(next.join(''));
}
}
return perms;
}
μ€λͺ :
- μμ΄λμ΄ : μμ΄λμ΄λ λ§€μ° κ°λ¨νλ€. λ¬Έμμ΄μ λ°°μ΄λ‘ λ³ννλ€. λ°°μ΄μμ νλμ λ¬Έμλ₯Ό μ νν λ€μ λλ¨Έμ§ λ¬Έμλ₯Ό μΉννλ€. λλ¨Έμ§ μΊλ¦ν°μ μμ΄μ μ»μ ν, μ°λ¦¬λ μ νν μΊλ¦ν°μ κ° μΊλ¦ν°λ₯Ό μ°κ²°νλ€.
- 1 λ¨κ³ μμλ₯Ό μ νν λ λ³κ²½νμ§ μλλ‘ μλ³Έ λ°°μ΄μ λ¨Όμ 볡μ¬
- 2 λ¨κ³ spliceλ₯Ό μ¬μ©νμ¬ λ³΅μ¬ λ λ°°μ΄μμ μμλ₯Ό μ κ±°νλ€. spliceκ° λ°°μ΄μμ νλͺ©μ μ κ±°νκΈ° λλ¬Έμ λ°°μ΄μ 볡μ¬νλ€. λ€μ λ°λ³΅μμ μ νν νλͺ©μ΄ νμνλ€.
- 3 λ¨κ³ [1,2,3,4] .splice (2,1)μ [3]μ λ°ννκ³ λλ¨Έμ§ λ°°μ΄ = [1,2,4]
- 4 λ¨κ³ : μ¬κ· λ©μλλ₯Ό μ¬μ©νμ¬ λ°°μ΄μ λ¬Έμμ΄λ‘ μ λ¬νμ¬ λλ¨Έμ§ μμμ μμ΄μ κ°μ Έμ¨λ€.
- 5 λ¨κ³ λ§μ§λ§μΌλ‘ κ° + a permute (bc)μ κ°μ μ°κ²°