반응형
judahhh
좋게 생각하면 좋게 흘러간다!
judahhh
전체 방문자
오늘
어제
  • 분류 전체보기 (90)
    • git (2)
    • Algorithm (39)
    • Computer Science (8)
    • TIL (8)
    • FrontEnd (3)
      • React (8)
      • Typescript (0)
      • Javascript (13)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 오블완
  • branch 조회
  • branch 생성
  • 이직
  • 자바스크립트
  • 자바스크립트 배열 함수
  • 티스토리챌린지
  • 주니어 개발자
  • 자바스크립트 배열 메소드
  • branch 이동
  • git branch
  • branch 삭제
  • 프론트엔드 개발자
  • git branch 명령어

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
judahhh

좋게 생각하면 좋게 흘러간다!

[JS] 프로그래머스 lv1. 숫자 문자열과 영단어
Algorithm

[JS] 프로그래머스 lv1. 숫자 문자열과 영단어

2023. 1. 9. 13:39
728x90

문제 설명

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

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

  • 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로 주어집니다.

 

입출력 예
"one4seveneight" 1478
"23four5six7" 234567
"2three45sixseven" 234567
"123" 123

 

 

나의 풀이

function solution(s) {
    let answer ='',str='';
		let num=["zero","one","two","three","four","five","six","seven","eight","nine"]
		s=s.split("")
		for(let i=0;i<s.length;i++){

			if(s[i]>=0&&s[i]<=9)answer+=s[i]
			else{
				str+=s[i]
					if(num.includes(str)){
					answer+=num.indexOf(str)
					str=''
					}
			}
		}

    return Number(answer);
}

풀이전략

  1. 입력받은 s를 split(””)로 배열로 분리하였다.
  2. 반복문으로 배열을 돌면서 숫자인 경우 answer에 문자열 형태로 더하고 문자일 경우 str이라는 문자열 변수에 집어넣은 후 한 숫자 단어가 완성이 되면 answer에 인덱스를 더한다. (인덱스가 그 숫자 단어의 숫자임)
  3. 한 단어의 숫자 변환이 끝났으면 str을 초기화 해준다
  4. answer은 문자열 형태이므로 숫자로 형 변환 후 return

참고

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);
}

깔끔 그 자체이고 이해하기도 쉽다

answer에 입력받은 s를 넣고 원하는 숫자 단어로 각각 자른 다음 부분을 i로 join()시키면 문자 단어가 숫자 단어로 바뀌게 된다

똑같은 배열 순회이지만 이 풀이는 numbers를 순회하여 10만큼만 순회하면 되지만 나는 s를 순회하는 풀이를 사용했기 때문에 s의 최대 길이 50만큼 순회할 수도 있다.

시간 복잡도 면에서도 가독성, 이해 면에서도 이 풀이가 더 멋진 풀이이다.

 

review)

split(””)과 join(””)은 배열을 만들고 문자열로 만드는 용도로만 사용하지 말고 어떤 문자로 묶고 해체하는 사용법도 익숙해지자

728x90
    'Algorithm' 카테고리의 다른 글
    • [JS] 프로그래머스 lv1. 숫자 문자열과 영단어
    • [JS] 프로그래머스 lv1. [1차] 비밀지도
    • [JS] 프로그래머스 lv1. K번째 수
    • [JS] 프로그래머스 lv1. 문자열 내 마음대로 정렬하기
    judahhh
    judahhh
    프론트엔드 개발자의 이모저모

    티스토리툴바