프로그래머스 JS 코딩테스트 | 숫자 문자열과 영단어
일단... 오늘부터 어려운거 풀자 싶어서 카카오 뭐시기.. 있는거를 겁 없이 선택했다.
탈탈 털렸다..^-^,,
결국 내 힘으로 풀진 못했고, 다른 사람들 풀이를 보고 그것 마저 이해하려고 노력했다..
그래도 혼자 풀어보려고 생 발악을 했으니까 올려본다..!!!
나중에 봤을때 내가 저랬구나...ㅋㅋ 싶을 것 같고 측은하면서도 기특할 것 같다
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분 넘게 들여다..보고.. 뜯어도 보고... 했다..!
그래도 많은 메소드를 시도해 봤고 새로운 방법으로 어떻게든 풀어보려 했어서 후회는 없다...
내 힘으로 풀지 못해서 찝찝하고 힘이 살짝 빠지긴 하지만...!
열심히 삽질해서 조금씩 실력을 키워야겠다.