728x90

Q. 주어진 String(문장)에서 각 단어의 첫 알파벳을 대문자로 바꿔라.

--- Examples
capitalize('a short sentence') --> 'A Short Sentence'
capitalize('a lazy fox') --> 'A Lazy Fox'
capitalize('look, it is working!') --> 'Look, It Is Working!'

Code

https://github.com/DasolPark/Algorithm_DataStructure_JavaScript-Stephen-/blob/08ffc38c2f7b32b8baa35a6ecfc6c1d367559b1c/exercises/capitalize/index.js

😢 배열(Array)의 index을 이용해서 원초적 해결하려 했더니 조금 힘들었다.

😊 Solution 1)
입력받은 str을 split(' ')을 이용해 각 단어별로 나눠진 Array를 만들어주고,
for ... of loop 안에서 각 단어를 하나씩 가져와, 첫 번째 알파벳은 대문자로, 나머지 값은 slice(1)로 붙여주었다.
그리고 join(' ')을 이용해 다시 String(문장)으로 만들어 반환해주었다.

Solution 2)
classic for loop을 이용해 각 index의 앞(i-1)이 ' '(space)라면 해당 index(i)를 대문자로 변환하여 저장한다.
그게 아니라면, 해당 index(i)를 단순 저장해준다.

✔ toUpperCase()

소문자를 대문자로 변환해준다.

✔ split(' ')

String을 ' '(space)기준으로 나눠서 array에 저장해준다

✔ slice(1)

index 1부터 끝까지 모두 slice해준다

✔ for ... of

Array의 안에 있는 값을 index 순서대로 하나씩 가져온다

✔ join(' ')

' '(space)기준으로 Array를 String(문장)으로 합쳐준다

Full Code

function capitalize(str) {
let result = str[0].toUpperCase();
 
for (let i = 1; i < str.length; i++) {
if (str[i - 1] === ' ') {
result += str[i].toUpperCase();
} else {
result += str[i];
}
}
 
return result;
}
 
// function capitalize(str) {
// const words = [];
 
// for (let word of str.split(' ')) {
// words.push(word[0].toUpperCase() + word.slice(1));
// }
 
// return words.join(' ');
// }
728x90

Q. 주어진 string의 회문 구조를 파악하고, 맞으면 true 틀리면 false를 return하라.

--- Examples
palindrome("abba") === true
palindrome("abcdefg") === false

Code

https://github.com/DasolPark/Algorithm_DataStructure_JavaScript-Stephen-/commit/efd69d6b976fab583958556518cf5b3162275d67
https://github.com/DasolPark/Algorithm_DataStructure_JavaScript-Stephen-/commit/efd69d6b976fab583958556518cf5b3162275d67

😢 reverse int and string에서 배웠던 Skill로도 충분했지만, 다른 방법을 적용해보고 싶었다.

😊 every()를 이용하여 주어진 string argument를 검사하는 방식을 배울 수 있었다.

✔ Array.prototype.every()

every() 괄호 안에 test function을 작성하여, 해당 array값을 이용해 test할 수 있다.
위의 소스코드에서는 char === str[str.length - i - 1]을 이용하여 맨 앞과 맨 뒤의 값을 하나씩 이동하며 비교하였다.
자세한 every() 사용법은 helper methods category에서 다루도록 하겠다.

Full Code

function palindrome(str) {
return str.split('').every((char, i) => {
return char === str[str.length - i - 1];
});
}
 
// function palindrome(str) {
// let reversed = str
// .split('')
// .reverse()
// .join();
// return str === reversed;
// }
728x90

Q. 주어진 integer를 정반대로 뒤바꾸고 return하라.

--- Examples
reverseInt(15) === 51
reverseInt(981) === 189
reverseInt(500) === 5
reverseInt(-15) === -51
reverseInt(-90) === -9

Code

https://github.com/DasolPark/Algorithm_DataStructure_JavaScript-Stephen-/commit/ccd99f2e87c5836d5e0b22793caf882e652d9529
https://github.com/DasolPark/Algorithm_DataStructure_JavaScript-Stephen-/commit/ccd99f2e87c5836d5e0b22793caf882e652d9529
https://github.com/DasolPark/Algorithm_DataStructure_JavaScript-Stephen-/commit/ccd99f2e87c5836d5e0b22793caf882e652d9529

😢 정반대로 바꾸는 것은 문제가 없었으나, 부호를 살리는 것과 다시 num type 으로 바꾸는 것에 대해서 어떻게 효율적으로 코드를 작성할 수 있을지 조금 고민을 했다.

😊 Math.sign()을 이용해 깔끔하게 부호를 살릴 수 있었고, Reverse String에서 쓰던 Skill들을 그대로 사용하였다.
그 외에 추가된 Skill은 toString(), parseInt()가 있다.

✔ Math.sign()

Math.sign()를 이용해 해당 변수의 부호를 알아내고 활용할 수 있다.
위의 소스코드에서 보면 알 수 있듯, arguments로 들어오는 n의 부호를 마지막에 곱해주어 해당 -(negative)를 다시 살려주었다.

✔ Number.prototype.toString()

처음에 들어오는 arguments가 number type이므로 reverse()를 이용할 것이라면 toString()으로 반드시 변환해줘야 한다.
그리고 reverse()를 사용하기 전에 split()사용하여 array로 반드시 변환해줘야 한다. Array.prototype.reverse()이기 때문이다.

✔ Global.parseInt()

string과 array를 이용해 number를 뒤바꾸어 주었으니, 최종값은 parseInt()를 이용해 number type으로 변환해야 한다.

Full Code

function reverseInt(n) {
let reversed = n
.toString()
.split('')
.reverse()
.join('');
return parseInt(reversed) * Math.sign(n);
}
 
// function reverseInt(n) {
// let rev = '';
 
// for (let num of n.toString()) {
// rev = num + rev;
// }
 
// return Math.sign(n) * parseInt(rev);
// }
 
// function reverseInt(n) {
// return (
// Math.sign(n) *
// parseInt(
// n
// .toString()
// .split('')
// .reduce((rev, num) => (rev = num + rev))
// )
// );
// }
728x90

Q. 주어진 string을 정반대로 뒤바꾸고 return하라.

--- Examples
reverse('apple') === 'leppa'
reverse('hello') === 'olleh'
reverse('Greetings!') === '!sgniteerG'

Code

https://github.com/DasolPark/Algorithm_DataStructure_JavaScript-Stephen-/commit/9cc55eac880eb89db3649ea8e440a311caa4ef48
https://github.com/DasolPark/Algorithm_DataStructure_JavaScript-Stephen-/commit/3437f358a612996ee0baa02a8ff2e1f5a414ef3c
https://github.com/DasolPark/Algorithm_DataStructure_JavaScript-Stephen-/commit/198f985e17d687765d99ee0bc31f739c587b4a50

😢 reverse() helper를 이용하여 쉽게 해결할 수 있지만, 다른 방법으로도 풀 수 있는 것이 중요하다.

😊 평소 자주 사용하지 않았던, for of loop와 reduce를 이용하여 쉽게 해결할 수 있었다.

 String.prototype.split()

split() 의 괄호 안에 separator를 지정하여 string을 array로 변환할 수 있다.

✔ Array.prototype.reverse()

method명 그대로 array의 순서를 정반대로 뒤바꿀 수 있다.
따라서 해당 값이 array가 아니라면, split('')을 이용해 array로 변경해주는 것이 중요하다.

Array.prototype.join()

join() 의 괄호 안에 separator를 지정하여 array를 string으로 변환할 수 있다.

Array.prototype.reduce()

reduce() 의 괄호 안에 reducer function을 작성하여 array 값을 다룰 수 있다. 
간단히 설명하자면, 첫 번째 arguments는 accumulator, 두 번째 arguments는 currentValue이며,
위의 3번째 소스코드처럼 rev에 char를 하나씩 계속 더하는 방식으로 결과를 도출해냈다.
자세한 내용은 helper methods category에서 다루도록 하겠다.

✔ for ... of

classic for loop 보다 fancy한 for loop이다.
for(let value of array){} 형식으로 사용하며, array의 첫 번째 값부터 마지막 값까지 순서대로 value에 전달한다.
평소 classic for loop을 이용하면 index 선언 순서가 헷갈리거나 오타가 발생할 수 있는데, 그것을 방지하는 것에 좋다.
다른 category에서 더 자세히 다루어 보겠다.

Full Code

function reverse(str) {
return str.split('').reduce((rev, char) => char + rev, '');
}
 
// function reverse(str) {
// return str
// .split('')
// .reverse()
// .join('');
// }
 
// function reverse(str) {
// let reversed = '';
 
// for (let character of str) {
// reversed = character + reversed;
// }
 
// return reversed;
// }

+ Recent posts