코딩쌀롱

Algorithm Day(배열 최소값 찾기, 문자열 자르기) 본문

개발공부

Algorithm Day(배열 최소값 찾기, 문자열 자르기)

이브✱ 2020. 12. 16. 21:42

📌 배열에서 최소값 찾기

✱하고 싶었던 것

// 5의 배수를 배열에 담아서 사용
const multipleOfFive = [];
for (let i = 40; i <= 100; i += 5){
    multipleOfFive.push(i);
}

function getMinMultiple(grade) {
    // multipleOfFive에서 grade값보다 크면서 최소값 반환
}

 

✱해결

   ✱Math.min.apply(null, arr);

function getMinMultiple(grade) {
    Math.min.apply(null, multipleOfFive);
}

처음에는 배열에서 최소값을 찾는 방법을 구글링 해서 Math()메서드를 사용하려 했다.

그러나 이렇게 하면, multipleOfFive 배열의 모든 원소 중 최소값을 반환하기 때문에 grade값보다 크다는 조건을 추가하기 어렵다.

   ✱arr.find(callback);

// grade값보다 크면서 최소값 반환
function getMinMultiple(grade) {
    return multipleOfFive.find(el => el > grade);
}

다음 방법으로는 find()메서드를 사용했다.

이렇게 하면 multipleOfFive 배열의 원소 중 콜백함수를 만족하는 첫 번째 요소를 반환한다. grade보다 커야한다는 조건을 콜백에 쓰고, 최소값인 조건은 multipleOfFive 배열의 원소가 오름차순으로 정렬되어 있기 때문에 첫 번째 원소가 최소값일 수밖에 없다.

+ find() 메서드 구문

arr.find(callback(el, idx, arr), thisArg);
// idx, arr, thisArg는 optional



📌 문자열 자르기

✱하고 싶었던 것

'12:01:00AM' → 이렇게 들어오는 인자를 hh, mm, ss, apm으로 쪼개고 싶다.

 

✱해결

문자열을 자르는 방법에는 세 가지가 있다.

  • split()
  • substr(startIdx, length)
  • substring(startIdx, endIdx)

   ✱split()

const s = '12:01:00AM'
let arr = s.split(":");  // ['12', '01', '00AM']

이렇게 하면 콜론을 없앨 수는 있지만 '00AM을 또 쪼개줘야 한다.

그리고 새로운 값을 재할당할 때 변수에 또 할당해주거나, 베열의 인덱스로 접근해 재할당해줘야한다.

   ✱substr()

const s = '12:01:00AM'
let [hh, mm, ss, apm] =
     [s.substr(0,2), s.substr(3, 2), s.substr(6, 2), s.substr(8, 2)]; 

이렇게 하면 원하는 만큼 문자열을 잘라서 변수에 할당할 수 있다.

또한 변수에 할당해줘서 값을 변경할 때도 편하다.

substring()의 종료인덱스보다는 substr()의 길이가 더 보기 좋은 것 같아 substr()을 사용했다.

Comments