πŸ‘©‍πŸ’»κ°œλ°œ_TIL/μ½”λ”©ν…ŒμŠ€νŠΈ

숫자 λ¬Έμžμ—΄κ³Ό μ˜λ‹¨μ–΄

Daisy.lee 2022. 1. 24. 13:02

숫자 λ¬Έμžμ—΄κ³Ό μ˜λ‹¨μ–΄

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

 

μ½”λ”©ν…ŒμŠ€νŠΈ μ—°μŠ΅ - 숫자 λ¬Έμžμ—΄κ³Ό μ˜λ‹¨μ–΄

λ„€μ˜€μ™€ ν”„λ‘œλ„κ°€ μˆ«μžλ†€μ΄λ₯Ό ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. λ„€μ˜€κ°€ ν”„λ‘œλ„μ—κ²Œ 숫자λ₯Ό 건넬 λ•Œ 일뢀 자릿수λ₯Ό μ˜λ‹¨μ–΄λ‘œ λ°”κΎΌ μΉ΄λ“œλ₯Ό 건넀주면 ν”„λ‘œλ„λŠ” μ›λž˜ 숫자λ₯Ό μ°ΎλŠ” κ²Œμž„μž…λ‹ˆλ‹€. λ‹€μŒμ€ 숫자의 일뢀 자

programmers.co.kr

 

 

λ‹€λ₯Έ μ‚¬λžŒλ“€μ€ μ–΄λ–€ λ°©μ‹μœΌλ‘œ ν’€μ—ˆλŠ”μ§€ μ°Ύμ•„λ³΄μ•˜λŠ”λ°, μ˜¬λΌμ™€μžˆλŠ” μ •λ‹΅ μ½”λ“œλ“€ μ€‘μ—μ„œ κ°€μž₯ λ§Žμ€ μ’‹μ•„μš”λ₯Ό 받은 μ½”λ“œκ°€ μΈμƒμ μ΄μ—ˆμŠ΅λ‹ˆλ‹€. 이λ₯Ό ν¬ν•¨ν•˜μ—¬ 이번 문제λ₯Ό ν•΄κ²°ν•˜λŠ” 방법을 크게 2κ°€μ§€λ‘œ λ‚˜λˆ„μ–΄λ³Ό 수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€.

1. replace λ©”μ„œλ“œμ™€ μ •κ·œν‘œν˜„μ‹

function solution(s) {
    s = s.replace(/zero/gi, '0')
    .replace(/one/gi, '1')
    .replace(/two/gi, '2')
    .replace(/three/gi, '3')
    .replace(/four/gi, '4')
    .replace(/five/gi, '5')
    .replace(/six/gi, '6')
    .replace(/seven/gi, '7')
    .replace(/eight/gi, '8')
    .replace(/nine/gi, '9')
    return parseInt(s);
}

 

 

πŸ€” μž…λ ₯λ˜λŠ” 값인 sκ°€ λ¬Έμžμ—΄μ΄κ³ , νŠΉμ • νŒ¨ν„΄μ„ μ°Ύμ•„μ•Ό ν•œλ‹€. -> μ •κ·œν‘œν˜„μ‹μ„ μ‚¬μš©ν•΄λ³ΌκΉŒ?

πŸ€” νŠΉμ • νŒ¨ν„΄μ„ μ°Ύμ•„μ„œ κ°ˆμ•„μΉ˜μš΄λ‹€. -> μ •κ·œν‘œν˜„μ‹κ³Ό replace λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•΄λ³ΌκΉŒ?

 

πŸ“Œ replace λ©”μ„œλ“œ

πŸ“Œ μ •κ·œν‘œν˜„μ‹

πŸ“Œ replace와 μ •κ·œν‘œν˜„μ‹ 같이 μ‚¬μš©ν•˜κΈ°

 

πŸ’‘ 좜λ ₯값은 μˆ«μžν˜•μ΄μ–΄μ•Ό ν•˜λ―€λ‘œ, λ¬Έμžμ—΄μΈ sλ₯Ό 숫자둜 λ³€ν™˜ν•œλ‹€. -> parseInt λ©”μ„œλ“œλ‘œ κ΅¬ν˜„ κ°€λŠ₯ν•©λ‹ˆλ‹€.

πŸ’‘ replace(μ •κ·œν‘œν˜„μ‹, λŒ€μ²΄ν•  λ¬Έμžμ—΄) μ΄λΌλŠ” κΈ°μˆ μ„ μ•Œκ²Œλ˜μ—ˆμŠ΅λ‹ˆλ‹€.

2. split λ©”μ„œλ“œμ™€ join λ©”μ„œλ“œ (feat. μ’‹μ•„μš” 103개λ₯Ό 받은 풀이 λ°©λ²•πŸ‘)

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); //Number() μƒμ„±μžλŠ” λ¬Έμžμ—΄μ΄λ‚˜ λ‹€λ₯Έ νƒ€μž…μ„ 숫자둜 μƒμ„±ν•©λ‹ˆλ‹€.
}

 

 

πŸ€” μˆ«μžμ— λŒ€μ‘ν•˜λŠ” μ˜λ‹¨μ–΄ ν‘œλ₯Ό μžμ„Ένžˆλ³΄λ‹ˆ, μˆ«μžκ°€ 0λΆ€ν„° μ‹œμž‘ν•˜λ„€? -> 인덱슀둜 ν™œμš©ν•  μˆ˜λŠ” μ—†μ„κΉŒ?

πŸ€” μ˜λ‹¨μ–΄λ₯Ό μš”μ†Œλ‘œ κ°€μ§€λŠ” 배열을 ν•˜λ‚˜ λ§Œλ“€λ©΄ 인덱슀λ₯Ό ν™œμš©ν•  수 μžˆμ„ 것 κ°™λ‹€.

πŸ€” μ£Όμ–΄μ§€λŠ” λ¬Έμžμ—΄μ„ μ˜λ‹¨μ–΄λ‘œ μͺΌκ°œμ„œ 숫자둜 ν•©μΉ˜λŠ” 방법을 생각해봐야 κ² λ‹€. -> split, join λ©”μ„œλ“œ ν™œμš©

 

πŸ“Œ split λ©”μ„œλ“œ

πŸ“Œ join λ©”μ„œλ“œ

 

"one4seveneight" λΌλŠ” μ˜ˆμ‹œλ₯Ό 톡해 μœ„μ˜ μ½”λ“œμ—μ„œ

split, join λ©”μ„œλ“œκ°€ ꡬ체적으둜 μ–΄λ–»κ²Œ μž‘λ™ν•˜λŠ”μ§€ λ³΄κ² μŠ΅λ‹ˆλ‹€.

 

 

//iκ°€ 0일 λ•Œ -> numbers[0]λŠ” 'zero'

answer.split(numbers[0])
//"one4seveneight"에 'zero'κ°€ μ—†μœΌλ―€λ‘œ 원본을 μœ μ§€ν•©λ‹ˆλ‹€.
arr.join(0)
//사이λ₯Ό κ²°ν•©ν•  λ˜λ‹€λ₯Έ λ¬Έμžμ—΄μ΄ μ—†μœΌλ―€λ‘œ κ²°ν•©ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

//iκ°€ 1일 λ•Œ -> numbers[1]λŠ” 'one'

answer.split(numbers[1])
//"", "4seveneight"
arr.join(1) 
//" "와 "4seveneight" 사이에 1 κ²°ν•© -> 14seveneight

...

//iκ°€ 7일 λ•Œ -> numbers[7]λŠ” 'seven'

answer.split(numbers[7])
 //"14", "eight"
arr.join(7)
// "14"와 "eight" 사이에 7 κ²°ν•© -> 147eight

//iκ°€ 8일 λ•Œ -> numbers[7]λŠ” 'eight'

answer.split(numbers[8]
 //"147", ""
arr.join(8)
 // "147"와 "" 사이에 7 κ²°ν•© -> 1478

 

 

πŸ’‘ split λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•  λ•Œ, κ΅¬λΆ„μž(seperator, μͺΌκ°œλŠ” 기쀀이 λ˜λŠ” λ¬Έμžμ—΄)λŠ” μ‚­μ œλ˜κ³  κ΅¬λΆ„μžλ‘œ λŠμ€ 각각의 λ¬Έμžμ—΄λ‘œ 이루어진 배열이 λ°˜ν™˜λ©λ‹ˆλ‹€. ν•œ 가지 더 μ•Œμ•„μ•Ό ν•˜λŠ” 것은, κ΅¬λΆ„μžκ°€ 맨 μ•žμ΄λ‚˜ 맨 뒀에 μžˆλŠ” κ²½μš°μ—λŠ” 빈 λ¬Έμžμ—΄λ‘œ μͺΌκ°œμ§„λ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€. μ΄λŠ” 곡식 λ¬Έμ„œμ—λ„ λ‚˜μ™€μžˆμŠ΅λ‹ˆλ‹€.

 

 

 

 

μ•žμ„œ λ³Έ "one4seveneight"을 "one"μ΄λΌλŠ” λ¬Έμžμ—΄λ‘œ μͺΌκ°€ 경우, μͺΌκ°œλŠ” 기쀀인 κ΅¬λΆ„μžκ°€ 맨 μ•žμ— μœ„μΉ˜ν•˜λ―€λ‘œ λΉˆλ¬Έμžμ—΄λ‘œ μ‹œμž‘ν•˜κ²Œ λ©λ‹ˆλ‹€. λ”°λΌμ„œ 빈 λ¬Έμžμ—΄ ""κ³Ό "4seveneight"으둜 λ‚˜λ‰©λ‹ˆλ‹€.

 

λ§ˆμ°¬κ°€μ§€λ‘œ "147eight"μ΄λΌλŠ” λ¬Έμžμ—΄μ„ "eight"을 κΈ°μ€€μœΌλ‘œ μͺΌκ°€ 경우, μͺΌκ°œλŠ” 기쀀인 κ΅¬λΆ„μžκ°€ 맨 뒀에 μœ„μΉ˜ν•˜λ―€λ‘œ λΉˆλ¬Έμžμ—΄λ‘œ λλ‚˜κ²Œ λ©λ‹ˆλ‹€. λ”°λΌμ„œ "147"κ³Ό 빈 λ¬Έμžμ—΄ ""으둜 λ‚˜λ‰©λ‹ˆλ‹€.

 

결과적으둜 μ˜λ‹¨μ–΄ κ΅¬λΆ„μžλ₯Ό κΈ°μ€€μœΌλ‘œ λ¬Έμžμ—΄μ΄ μͺΌκ°œμ§€κ³ , μ˜λ‹¨μ–΄ κ΅¬λΆ„μžκ°€ 있던 μžλ¦¬μ— 숫자λ₯Ό κ²°ν•©ν•˜λŠ”λ°©λ²•μ„ 반볡적으둜 μˆ˜ν–‰ν•˜κ²Œ λ˜λŠ” κ²ƒμž…λ‹ˆλ‹€.

3쀄 정리

1. 숫자둜 λ³€ν™˜ν•˜λŠ” 법: parsInt λ©”μ„œλ“œ(λ¬Έμžμ—΄ -> μ •μˆ˜) λ˜λŠ” Number() μƒμ„±μž

2. split λ©”μ„œλ“œμ™€ join λ©”μ„œλ“œλ₯Ό ν•¨κ»˜ ν™œμš©ν•  수 μžˆλ‹€.

- split λ©”μ„œλ“œ: κ΅¬λΆ„μžλ₯Ό κΈ°μ€€μœΌλ‘œ λ¬Έμžμ—΄ μͺΌκ°œκΈ°.

- 특히 κ΅¬λΆ„μžκ°€ 맨 μ•ž λ˜λŠ” 맨 뒀에 μžˆλŠ” κ²½μš°μ—λŠ” 빈 λ¬Έμžμ—΄λ‘œ μͺΌκ°œμ§„λ‹€ -> join을 ν™œμš©ν•  수 있음.

- join λ©”μ„œλ“œ: μ—¬λŸ¬ λ¬Έμžμ—΄ 사이에 νŠΉμ • λ¬Έμžμ—΄μ„ λ„£μ–΄ ν•˜λ‚˜λ‘œ κ²°ν•©ν•˜κΈ°.

3. μ •κ·œν‘œν˜„μ‹μ„ λ°°μ›Œμ„œ μ •λ¦¬ν•΄λ³΄μž.


μœ„μ˜ μ½”λ“œλŠ” μ΄λŸ¬ν•œ 점을 ν™œμš©ν•΄, μ˜λ‹¨μ–΄ κ΅¬λΆ„μžκ°€ μ‚­μ œλœ 곡간 사이에 join으둜 숫자λ₯Ό κ²°ν•©ν•˜λŠ” 방식을 νƒν–ˆμŠ΅λ‹ˆλ‹€. 이 μ½”λ“œκ°€ λ§Žμ€ μ’‹μ•„μš”λ₯Ό 받은 μ΄μœ λŠ”, ν”νžˆ μ•Œκ³  μžˆλŠ” λ©”μ„œλ“œλ₯Ό κΈ°λ°œν•œ λ°©μ‹μœΌλ‘œ μ‚¬μš©ν•΄ μ½”λ“œλ₯Ό κΉ”λ”ν•˜κ²Œ μ²˜λ¦¬ν–ˆλ‹€λŠ” μ μ—μ„œμ—μ„œ λ§Žμ€ 뢄듀이 κ°νƒ„ν–ˆκΈ° λ•Œλ¬Έμ΄λΌκ³  μƒκ°ν•©λ‹ˆλ‹€.

 

μ € μ—­μ‹œ 인덱슀λ₯Ό ν™œμš©ν•˜κ³  λ¬Έμžμ—΄μ„ μͺΌκ°œλŠ” λ°œμƒμœΌλ‘œ 이 λ¬Έμ œμ— μ ‘κ·Όν–ˆλŠ”λ°, μ™„μ „νžˆ κ΅¬ν˜„ν•˜μ§€λŠ” λͺ»ν–ˆμŠ΅λ‹ˆλ‹€. 쒋은 μ½”λ“œλ“€μ„ λΆ„μ„ν•¨μœΌλ‘œμ¨ λ§Žμ€ 것을 μ–»μ–΄κ°ˆ 수 μžˆλŠ” λ¬Έμ œμ˜€μŠ΅λ‹ˆλ‹€.


μ €λŠ” 아직 μžλ£Œκ΅¬μ‘°μ™€ μ•Œκ³ λ¦¬μ¦˜μ— λŒ€ν•œ 이해가 λΆ€μ‘±ν•œλ°, μ΄λ²ˆμ— μ½”λ”©ν…ŒμŠ€νŠΈλ₯Ό λ³Ό κΈ°νšŒκ°€ 생겨 일단 λ¬΄μž‘μ • 곡뢀λ₯Ό μ‹œμž‘ν•˜κ²Œ λ˜μ—ˆμŠ΅λ‹ˆλ‹€(γ… γ… )κ·Έλž˜μ„œ λ‹€λ₯Έ λΆ„λ“€μ˜ 풀이λ₯Ό λΆ„μ„ν•˜λ©΄μ„œ 문제 ν•΄κ²°μ˜ 둜직과 νŒμ„ μ•Œμ•„κ°€λŠ” λ°©μ‹μœΌλ‘œ 곡뢀λ₯Ό μ‹œμž‘ν•˜λ €κ³  ν•©λ‹ˆλ‹€. ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€μ—μ„œ 찾은 μ—¬λŸ¬ 풀이 방법을 μ†Œκ°œν•˜κ³ , μ•„λž˜μ˜ μˆœμ„œλŒ€λ‘œ μ •λ¦¬ν•΄λ³΄μ•˜μŠ΅λ‹ˆλ‹€. μ°Έκ³ ν•˜μ‹œκΈ° λ°”λžλ‹ˆλ‹€.😎

 

- μ œκ°€ λ‚˜λ¦„λŒ€λ‘œ μΆ”μΈ‘ν•œ 문제 μ ‘κ·Ό 방식 (πŸ€”)

- μ‚¬μš©λœ λ©”μ„œλ“œ 및 기술 (πŸ“Œ)

- μ•Œκ²Œλœ 것 (πŸ’‘)