코딩 테스트 in JS

프로그래머스 JS 코딩테스트 | 숫자 문자열과 영단어

바닷가쟤 2023. 8. 30. 14:22

일단... 오늘부터 어려운거 풀자 싶어서 카카오 뭐시기.. 있는거를 겁 없이 선택했다.

탈탈 털렸다..^-^,,

결국 내 힘으로 풀진 못했고, 다른 사람들 풀이를 보고 그것 마저 이해하려고 노력했다..

그래도 혼자 풀어보려고 생 발악을 했으니까 올려본다..!!!

나중에 봤을때 내가 저랬구나...ㅋㅋ 싶을 것 같고 측은하면서도 기특할 것 같다


https://school.programmers.co.kr/learn/courses/30/lessons/81301

숫자 문자열과 영단어

const answer = []
const num = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
const en = ['zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eigth', 'nine']

이렇게 배열을 만들어서 find, filter, indexOf, findIndex, includes … 쓸 수 있을 것 같다…

s에서 en[n]과 일치하는 것을 찾아서 num[n]을 answer 배열에 push한다.

 

s.includes("one")

s.match(”one”)

const en = ['zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eigth', 'nine']
return s.match(en[6])

이런 식으로 해야 할 것 같기도 하고…

en[0].length

문자열 길이를 뽑아서 s에서 숫자 리턴하면 쓴 건 잘라내서 해야하나…


첫 번째 시도

function solution(s) {
    const answer = []
    let newS = ''
    const num = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    const en = ['zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eigth', 'nine']
    
    for(let i = 0; i < 10; i++) {
        if(s.match(en[i])) {
            answer.push(num[i])
            newS = s.slice(en[i].length)
        } else if(s.match(num[i])) {
            answer.push(num[i])
        }
    }
    return answer
}

띠용?

열시미 해보자

function solution(s) {
    const answer = []
    const num = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    const en = ['zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine']
    
    for(let i = 0; i <= 9; i++) {
        if(s.match(en[i])) {
            answer.push(num[i])
        } else if(s.match(num[i])) {
             answer.push(num[i])
        }
    }
    return parseInt(answer.join(''))
}

이렇게 하면 순서대로 숫자가 있는 경우는 통과하는데, 정렬되지 않은 케이스면 실패가 뜬다.

이런건.. 정렬이 되어있어서 통과…

그치만… 정렬이 되어있지 않은 경우는 실패이다.

 

s.indexOf(s.match(en[i])) 뭔가 이 index로 순서대로 정렬할 수 있을 것 같다.

 

하하하하ㅏ하핳

answer를 newArray(s.length)로 일단 생성하고

index 번호 자리에 splice 해서 뒤에 쓸데없는 배열을 자르면 !??!?!?!

months.splice(4, 1, 'May');

이게 있지 하하

function solution(s) {
    let answer = new Array(s.length).fill(0)
    let index = ''
    const num = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    const en = ['zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine']
    
    for(let i = 0; i <= 9; i++) {
        if(s.match(en[i])) {
            index = s.indexOf(s.match(en[i]))
            answer.splice(index,1,num[i])
        }
        if(s.match(num[i])) {
            index = s.indexOf(s.match(num[i]))
            answer.splice(index,1,num[i])
        }
    }
    return answer
}

대충 이렇게 해 봤는데 … 왜.. 중간에 무수히 많은 0?

아….. ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ

ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ

하…..

three면 5칸임ㅋ.ㅋ.ㅋ.

이거 안댐.

 

어카냐???????????

결국 다른 사람 풀이 보기로… (여기서 실성한 것 같다)


다른 사람 풀이

function solution(s) {
    let numbers = ["zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"];
    var answer = s;

    for(let i=0; i< numbers.length; i++) {
        let arr = answer.split(numbers[i]);
        answer = arr.join(i);
    }

    return Number(answer);
}

어….음…

너무 어렵꾼……

join부분이 완벽히 이해가 되지 않는당..

그래도 10분 넘게 들여다..보고.. 뜯어도 보고... 했다..!


그래도 많은 메소드를 시도해 봤고 새로운 방법으로 어떻게든 풀어보려 했어서 후회는 없다...

내 힘으로 풀지 못해서 찝찝하고 힘이 살짝 빠지긴 하지만...!

열심히 삽질해서 조금씩 실력을 키워야겠다.

 

728x90