프로그래머스) -1단계 숫자 문자열과 영단어

n-u·2022년 6월 2일
0

Algorithm

목록 보기
1/33
post-thumbnail

문제

숫자의 일부 자리수가 영단어로 바뀐 단어를 원래의 숫자를 return하도록 solution함수를 작성한다.

입출력

  • "one4seveneight" -> 1478
  • "23four5six7" -> 234567
  • "2three45sixseven" -> 234567

코드

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

    return Number(answer);
}
  • answer.split(numbers[i]);

    • 함수가 받는 인수을 numbers 배열의 값('zero, one, two...')에 의해 분리한다.

      i = 0인 경우

      • "one4seveneight" -> "one4seveneight"
        i =1인 경우
      • "one4seveneight" -> " 4seveneight"
        ... i = 7인경우 ....
      • " 4seveneight' -> " 4 eight"

    이런식으로 배열의 요소의 값을 통해 인수로 받은 값을 나눈다.

  • answer = arr.join(i);

    • 이전 코드로 인해 단어가 나누어진 곳에 join()메서드를 이용해 현재 i의 값을 넣어준다.

      i =1인 경우

      • "one4seveneight" -> "_4seveneight" -> "14seveneight"
        ... i = 7인경우 .....
      • "14seveneight" -> "14_eight" -> "147eight"

    이 과정을 numbers[i]의 length값만큼 반복하게 되면 입력된 단어를 숫자로 변환이 된다.


사용된 코드 개념 정리

1. split()

String.prototype.split()- mdn문서

  • String 객체에 사용하며, 매개변수(separator,limit)

    • separator : 원본 문자열을 끊어야 할 부분을 나타내는 문자열(string)
    • limit : 끊어진 문자열의 최대 개수를 나타내는 정수
  • 반환값 : 주어진 문자열을 separator마다 끊은 부분 문자열을 담은 Array(배열)

  • 사용된 문자열에서 sperator가 등장하면 그 부분은 삭제되고 문자열이 배열로 반환된다.

  • 문자열 -> 배열

예제

var tempestString = 'Oh brave new world that has such people in it.';
var monthString = 'Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec';

//공백마다 문자열을 잘라 배열로 반환한다.
var arrayOffset = tempestString.split(' ');
console.log(arrayOffset);

//공백마다 문자열을 자르며 4개만 반환한다.
var arrayOffset2 = tempestString.split(' ', 4);
console.log(arrayOffset2);

결과값

[ 'Oh', 'brave','new', 'world', 'that', 'has','such', 'people','in', 'it.']
[ 'Oh', 'brave', 'new', 'world' ]

2. join()

Array.prototype.join() - mdn문서

  • 배열에 사용하며, 배열의 모든 요소를 연결해 하나의 문자열로 만든다.
  • 배열 -> 문자열
  • 매개변수 sperator : 배열의 각 요소를 구분할 문자열을 지정한다.
    • 생략한다면, 배열의 요소들이 쉽표로 구분된다.
    • 빈문자열이면, 모든 요소들이 사이에 아무 문자 없이 연결된다.
  • 요소가 undefined, null이면 빈 문자열을 반환한다.

예제

var a = ['바람', '비', '불'];
var myVar1 = a.join();
var myVar2 = a.join(', ');
var myVar3 = a.join(' + ');
var myVar4 = a.join('');

console.log(myVar1);
console.log(myVar2);
console.log(myVar3);
console.log(myVar4);

결과값

바람,,//매개변수가 생략하면 기본으로 ,(콤마)
바람,, 불
바람 ++ 불
바람비불

문제의 흐름은 이해하기 쉬웠으나, 처음이라 코드로 작성하는 것 조차 어려웠다.
이 문제를 풀려고 많은 시간동안 고민했지만, 결국에는 다른 사람들의 코드를 참고하게 되었다. 참고하면서 내가 문법적 개념이 부족하다는 것을 느껴졌다. 조금씩 문제를 풀어가면서 어떤 메서드나, 어떤 것들이 사용되는지에 대해 꼼꼼히 공부할 필요가 있다고 생각이 들었다.

profile
기록하며 발전하는 삶

0개의 댓글