계속 밤에 풀다보니까 하루가 지나서 올리게 됨..
오늘의 문제는 3가지.
DESCRIPTION:
Complete the function that accepts a string parameter, and reverses each word in the string. All spaces in the string should be retained.
Examples
"This is an example!" ==> "sihT si na !elpmaxe"
"double spaces" ==> "elbuod secaps"
function reverseWords(str) {
let reversedStr = str
.split("")
.reverse()
.join("");
let reversedWords = reversedStr.split(" ").reverse().join(" ");
return reversedWords;
}
이렇게까지만 생각했는데 찍어보니
let reversedStr = str
.split("")
.reverse();
"This is an example!" 이런 문자열이 왔다 치면,
바로 위코드로는 "example! an is This" 이렇게 결과 값이 나온다. 이걸 다시 split(" ")으로 단어별로 나누고 다시 reverse()를 해주고 , join("")을 통해 문자열로 만들어줘야함!
DESCRIPTION:
There is an array with some numbers. All numbers are equal except for one. Try to find it!
findUniq([ 1, 1, 1, 2, 1, 1 ]) === 2
findUniq([ 0, 0, 0.55, 0, 0 ]) === 0.55
It’s guaranteed that array contains at least 3 numbers.
The tests contain some very huge arrays, so think about performance.
This is the first kata in series:
Find the unique number (this kata)
Find the unique string
Find The Unique위문제들도 풀어보기.
일단 중복을 제거하기위해 Set을 사용.
Set으로 만들고 그에 대한 요소를 순회하는 for...of 문으로 indexOf()/lastIndexOf를 통해 중복되지않은 요소를 찾고 요소를 반환.하는 방법.
indexOf()는 앞에서부터 lastIndexOf는 뒤에서부터 고로 같은 인덱스값을 가지면 유일한 요소.
function findUniq(arr) {
// Set을 사용하여 중복을 제거한 배열을 생성
const uniqueNumbers = new Set(arr);
// Set에서 유니크한 숫자를 찾아 반환
for (let num of uniqueNumbers) {
if (arr.indexOf(num) === arr.lastIndexOf(num)) {
return num;
}
}
}
function findUniq(arr) {
return arr.find(n => arr.indexOf(n) === arr.lastIndexOf(n));
}
find()메서드를 통해 짠 코드지만 이건 시간복잡도가 O(n^2)이므로 요구사항에서 테스트코드에서 엄청 큰 배열이 있으니 성능을 신경써라는 항목이 있었기에 적합하진 않은 코드같다.
find()의 시간복잡도 O(n)을 갖고, 메서드 안에서 arr.indexOf()와 arr.lastIndexOf()가 각각 호출되어 O(n^2)이므로 위코드가 성능적으로 좋다 볼 수 있다.
DESCRIPTION:
Jamie is a programmer, and James' girlfriend. She likes diamonds, and wants a diamond string from James. Since James doesn't know how to make this happen, he needs your help.
Task
You need to return a string that looks like a diamond shape when printed on the screen, using asterisk (*) characters. Trailing spaces should be removed, and every line must be terminated with a newline character (\n).
Return null/nil/None/... if the input is an even number or negative, as it is not possible to print a diamond of even or negative size.
이문제는 얼마전 푼 문제와 거의 비슷해서 금방 풀었다.
function diamond(n) {
if (n % 2 === 0 || n < 1) {
return null;
}
const diamondArr = [];
const middleIndex = Math.floor(n / 2);
for (let i = 0; i < n; i++) {
const spaces = Math.abs(middleIndex - i);
const stars = n - 2 * spaces;
diamondArr.push(' '.repeat(spaces) + '*'.repeat(stars) + '\n');
}
return diamondArr.join('');
}
다만 조건이 홀수여야 하는 부분이 추가됐다.
항상 좋은 글 감사합니다.