Stay hungry, Stay foolish

(lv.1) 숫자 문자열과 영단어 본문

알고리즘, 자료구조

(lv.1) 숫자 문자열과 영단어

Jake2 2022. 4. 24. 16:40

네오와 프로도가 숫자놀이를 하고 있습니다. 네오가 프로도에게 숫자를 건넬 때 일부 자릿수를 영단어로 바꾼 카드를 건네주면 프로도는 원래 숫자를 찾는 게임입니다.

다음은 숫자의 일부 자릿수를 영단어로 바꾸는 예시입니다.

  • 1478 → "one4seveneight"
  • 234567 → "23four5six7"
  • 10203 → "1zerotwozero3"

이렇게 숫자의 일부 자릿수가 영단어로 바뀌어졌거나, 혹은 바뀌지 않고 그대로인 문자열 s가 매개변수로 주어집니다. s가 의미하는 원래 숫자를 return 하도록 solution 함수를 완성해주세요.

참고로 각 숫자에 대응되는 영단어는 다음 표와 같습니다.

숫자영단어

0 zero
1 one
2 two
3 three
4 four
5 five
6 six
7 seven
8 eight
9 nine

 

제한사항

  • 1 ≤ s의 길이 ≤ 50
  • s가 "zero" 또는 "0"으로 시작하는 경우는 주어지지 않습니다.
  • return 값이 1 이상 2,000,000,000 이하의 정수가 되는 올바른 입력만 s로 주어집니다.

입출력 예

sresult

"one4seveneight" 1478
"23four5six7" 234567
"2three45sixseven" 234567
"123" 123

내 풀이

def solution(s)
    eng_to_num =
        { zero: "0",
          one: "1",
          two: "2",
          three: "3",
          four: "4",
          five: "5",
          six: "6",
          seven: "7",
          eight: "8",
          nine: "9" }

    eng_to_num.each do |k, v|
        k = k.to_s
        while s.include?(k)
            s[k] = v
        end
    end

    return s.to_i
end

후... tistory 코드 블럭에 ruby  는 지원도 안되는구나...??? 넘나 슬픈것

원래는 while 문 없이 if 문으로 조건 판별해서 tr_s("str_1", "str_2")  라는 method 가 있길래 사용해봤는데

tr_s method 는 적절 치 않았던게

"abc", "123" 이라는 arg 를 부여해주면 aqwebec -> 1qwe2e3 처럼 index를 매칭해서 변경시키는 함수였다...

그래서 if 문과 s[k]를 했는데 s = "sixsix" 같이 중복되는 부분에서 1회만 검증하고 넘어가는게 문제

따라서 마음이 불편 하지만 while 문을 사용해줬다.

 

근데 다른 사람들 풀이 보니 전부 gsub 을 통해 해주었더라.. 정작 회사에서는 gsub 으로 코드 많이 짜여있는데 여기선 생각을 안했다

 

https://programmers.co.kr/learn/courses/30/lessons/81301?language=ruby#

 

코딩테스트 연습 - 숫자 문자열과 영단어

네오와 프로도가 숫자놀이를 하고 있습니다. 네오가 프로도에게 숫자를 건넬 때 일부 자릿수를 영단어로 바꾼 카드를 건네주면 프로도는 원래 숫자를 찾는 게임입니다. 다음은 숫자의 일부 자

programmers.co.kr

 

'알고리즘, 자료구조' 카테고리의 다른 글

[codility] MaxCounters  (0) 2022.10.18
Comments