오늘은 JavaScript 시험이 있었는데, 내가 애먹거나 풀지못한 문제를 리뷰해보려고 한다
getFind 함수를 작성하세요.
문자와 문자열이 주어졌을때, getFind 함수는 주어진 문자열에서 주어진 문자가 나타나는 첫번째 위치를 반환합니다.
Notes: 문자열의 첫번째 문자는 인덱스 값 0 을 가집니다. 만약 문자열에 해당 문자가 여러번 나타나면, 첫번째로 나타나는 위치를 반환해야 합니다. 만약 문자가 문자열에 존재하지 않는다면, -1 을 반환해야 합니다.
<중요!! indexOf 함수를 사용하지 마세요>
indexOf
를 사용한다면 너무 쉽고 간단하게 풀었을 문제였지만, 쓰지 못해서 당황했던 문제였다
처음에 변수로 주어진 값은 문자열이라 split 프로퍼티를 이용해 string을 배열로 쪼개서 index값을 가져오려고 했다
let filter = "a"
let sentence = "I am a hacker"
function getFind(filter, sentence) {
// 아래 코드를 작성해주세요.
let chopSentence = sentence.split("")
console.log(chopSentence)
처음엔 일단 string값을 배열로 쪼개 index값을 얻기위해 split
으로 쪼개긴했지만 indexOf
를 쓰지않고 어떻게 index값을 가져올지 막막했었다. 그래서 일단 string을 배열로 쪼갠 index값을 얻기 위해 반복문으로 내가 원하는 값을 얻어야한다고 생각해 for문을 작성하였다. console.log(chopSentence)
로 콘솔에 출력해보니 stirng값이 배열로 글자단위로 쪼개지는 것을 확인하였다
function getFind(filter, sentence) {
let chopSentence = sentence.split("")
let sum = 0
for (let i=0; i<chopSentence.length; i++) {
sum = sum + 1
if (chopSentence[i] === filter) {
return sum - 1
break;
}
}
return -1
}
0부터 시작해서 순회하기 시작하는데 조건에 맞으면 loop에서 탈출하는 식을 작성했다
index값은 0부터 시작하지만, 내가 설계한 식은 1부터 시작하기에 결과 값을 출력하기 전에 -1을 해주었다
나의 풀이 방법이 옳은 방법인지는 확실하진 않지만, 나는 이렇게 풀었다
혹시라도 풀이가 틀렸다면 훗날 수정하도록 하겠다...
find_longest_word 함수를 만들어 주세요.
주어진 리스트안에 있는 단어 중 가장 긴 단어를 찾을수 있도록 함수를 완성해주세요.
let arr = ["PHP", "Exercises", "Backend"]
이 문제는 시간이 모자라 풀지 못했기도 했지만, 너무 복잡하게 생각 했던 탓에 풀지 못했던 것 같다
처음에는 배열 속 요소의 길이 값을 모두 구한 뒤 max값
즉, 가장 큰 길이값의 index를 출력하여 원하는 값을 출력하게끔 해야겠다고 생각했었다
생각은 그렇게 했지만 필요한 프로퍼티를 찾지는 못해 더 고민했고,
빈 배열을 생성해 for문으로 각 배열의 요소마다 비교해 더 큰 값을 빈 배열에 덮어 씌우는 방식으로 풀기로 했다
let arr = ["PHP", "Exercises", "Backend"]
function find_longest_word(arr) {
let longestWord = []
for(let i = 0; i < arr.length; i++){
if(arr[i].length > longestWord.length){
longestWord = arr[i]
}
}
return longestWord
}
이렇게 각각의 배열을 비교해 더 큰 값을 빈 배열에 덮어씌우는 로직으로
배열을 순회하면서 매번 길이가 큰 값을 빈 배열에 넣을 수 있게 만들었다
대체적으로 문제를 풀면서 배열 관련 문제를 어렵게 풀었던 것 같아 기본기를 더 다져야겠다고 생각한 하루였다 😢