프론트엔드 개발자가 될거야./js

위코드 2주차 중간시험 리뷰

정니정은니 2022. 7. 1. 17:25

위코드 1주차로 html,css,js replit 풀고

위코드 2주차로 인스타그램 클론코딩 + 몇가지 js 기능 구현을 했다.

 

그리고 나의 학습을 스스로 점검하기 위해 중간 시험을 치뤘다.

1시간동안 자바스크립트 5문제를 푸는 형식이었다.

 

4,5번 문제는 (나는..) 어려웠다.. ^__^

 

01.  isEven

Q. 짝수인지 판별하는 함수 isEven을 작성 주세요.

console.log(isEven(11)) // --> "짝수가 아닙니다."
console.log(isEven(10)) // --> "짝수 입니다."

나의 방법

function isEven(num) {
  // 아래 코드를 입력해주세요.
    if (num % 2 === 0) {
      return "짝수 입니다."
    } else {
      return "짝수가 아닙니다."
    }
  }

다른 방법

if문이랑 구조만 다르지만

삼항 연산자로 풀어서 가독성 높이고 더 간단하게 하는 방법이다.

function isEven(num) {
  return (num % 2 === 0) ? "짝수 입니다." : "짝수가 아닙니다.";
}

02. calculateTotal

Q. calculateTotal 함수를 작성하세요.

팁과 세금을 제외한 식사값이 주어졌을때, calculateTotal 함수는 팁과 세금이 포함된 총 식사값을 반환합니다.

Notes:

  • 세금은 9.5% 팁은 15% 로 계산하세요.
  • 팁을 계산할때 세금을 포함하여 계산하지 마세요.
console.log(calculateTotal(20)); // --> 24.9

나의 방법

function calculateTotal(amount) {
  let a = amount * 0.095
  let b = amount * 0.15
  return amount + a + b
}

이거는 설명할 것이 따로 없다!


03. getPrefix

Q. getPrefix 함수를 작성하세요.

문자열이 주어졌을때, -를 기준으로 앞에 있는 문자열을 반환하세요.

console.log(getPrefix('BTC-KRW')) // --> BTC

나의 방법

function getPrefix(str) {
  let a = str.split('-')
  return a[0]
}

str을 split메서드를 사용해서 배열로 바꿔준다.

a = [BTC, KRW]가 되고

a배열의 0번째 요소를 뽑으면 정답


04. getFine 

getFind 함수를 작성하세요.

문자와 문자열이 주어졌을때, getFind 함수는 주어진 문자열에서 주어진 문자가 나타나는 첫번째 위치를 반환합니다.

Notes: 문자열의 첫번째 문자는 인덱스 값 0 을 가집니다. 만약 문자열에 해당 문자가 여러번 나타나면, 첫번째로 나타나는 위치를 반환해야 합니다. 만약 문자가 문자열에 존재하지 않는다면, -1 을 반환해야 합니다.

중요!! indexOf 함수를 사용하지 마세요.

const output = getFind('a', 'I am a hacker')
console.log(output) // --> 2

나의 방법 (익현님에게 배운..)

function getFind(filter, sentence) { 
  if(sentence.includes(filter)) {
    for(let i in sentence) {
      if(sentence[i] === filter) {
        return Number(i)
      }
    }
  } else {
    return -1
  }
}

if(sentence.includes(filter)) 여기까지 쓰고 그 다음에 어떻게 해야할지 감이 안잡혀서 못풀었다.

'I am a hacker'이거를 하나씩 뽑아내고 싶은데 문자열을 하나씩 뽑아내는 방법을 몰랐다.

왜냐하면 for...in문이 배열의 요소랑 객체의 키는 뽑아낸다는 걸 알았지만

문자열의 문자 하나하나까지도 뽑아주는 줄은 몰랐기 때문이다.

(근데.. for(let i in sentence) = for (let i = 0; i < sentence.length; i++)

 즉, for..in문 = for문인데 왜 for문으로 풀 생각을 못했는가... 문제를 많이 풀어봐야할 것 같다..!! )

하나 더 배울 수 있었던 시간이었다..!

아무튼 그래서 for..in문으로 'I am a hacker'를 하나하나 해체해 볼 수 있었다!

'I'/' '/'a'/'m' .... 이렇게....

이제 그 뽑아낸 것이 'a'랑 같으면 그에 해당하는 i를 호출하려고 하니

문자열이라고 해서 Number(i)로 숫자로 바꿔주었다.

다른 방법

function getFind(filter, sentence) {
  let answer = sentence.search(filter)
  return answer
}

search 메서드를 사용하는 방법이다.

근데 search메서드도 indexOf처럼 일치하는 문자의 위치를 반환해줘서 거의 indexOf랑 같은 메서드다.

이 문제에서 원하는 풀이가 아닐 것 같다!


05. findLongestWord

find_longest_word 함수를 만들어 주세요.

주어진 리스트안에 있는 단어중 가장 긴 단어를 찾을수 있도록 함수를 완성해주세요.

console.log(find_longest_word(["PHP", "Exercises", "Backend"])) 
// --> "Exercises"

나의 방법

function find_longest_word(arr) {
  let max = arr[0] //PHP
  for(let i = 0; i < arr.length; i++) {
    if(arr[i].length > max.length) {
      max = arr[i]      
    } 
  } return max
}

먼저 let max = arr[0]해서 arr[0]을 가장 긴 단어로 가정해줬다.

그리고 for문을 돌려서 요소의 길이를 비교했다.

그래서 arr[0].length 보다 더 긴 요소가 있으면

max를 재할당해줬다.

 

 

 

이런 알고리즘 문제들을 많이 풀어봐야겠다고 느낀 하루였다.

주말동안 열공해야지