Javascript

Javascript String 레퍼 객체, 알고리즘 문제 3개 풀기

big whale 2021. 5. 28. 21:15

문자열을 다룰 때 유용한 프로퍼티와 메소드를 제공하는 레퍼(wrapper)객체이다.

원시타입인 문자열이 wrapper객체 메소드 사용할수 있는 이유는 문자열이 프로퍼티,메소드 호출시 wrapper객체로 일시적으로 변환되서다.

1. String Constructor

  • 생성방법: let strOjb = new String('Lee');
  • 이때 어떤 타입의 인자가 와도 문자열로 변환된다.

2. String property

2.1  String.length

  • String의 길이를 구할 때 사용한다.

3. String Method

3.1 charAt(number)

  • 인덱스에 해당하는 위치의 문자를 반환한다.
  • const str = 'Hello;
  • str.charAt(0):'H'

3.2 concat(string)

  • 인수로 전달한 문자열과 연결하여 새로운 문자열을 반환한다.
  • concat메소드 보다 +,+=이 성능이 좋다.
  • str2 = str1.concat(str1);

3.3 indexOf(searchString,fromIndex)

  • 인수로 전달한 문자 또는 문자열을 대상 문자열에서 처음 발견된 곳의 index를 반환한다.
  • 발견하지 못하면 -1 반환한다.
  • 'Hello World'.indexOf('W'); //6
  • 'Hello World'.indexOf('or',8); //반환값-1이고 8번째 인덱스부터 검색하기 시작해서 'or'을 찾을 수 없다.
  • 'Hello'.includes('Hello'); : 'Hello'에 'Hello'가 포함되어 있으면 True,아니면 False

3.4 lastIndexOf(searchString,fromIndex)

  • 인수로 전달한 문자,문자열이 가장 마지막으로 발견된 곳의 인덱스를 반환한다.없는경우 -1 반환한다.
  • fromIndex번째 인덱스부터 역방향으로 찾는다.
  • conct str = 'Hello World';
  • str.lastIndexOf('World'); : 'World'는 6번째 인덱스에서부터 마지막 발견므로 6이 반환된다.
  • str.lastIndexOf('o',5); : 5번째 인덱스부터 역방향으로 'o' 있나 찾기, 'o'는 4번째에 있다.

3.5 replace(searchValue,replaceValue);

  • 첫번째 인수로 전달한 문자열,정규표현식을 대상 문자열에서 찾은 뒤 두번째 인수로 대체한다.
  • 원본 문자열은 변경되지 않고 새로운 문자열을 반환한다.
  • 첫번째 인수 문자열이 여러개면 가장 첫번째로 검색된 것만 대체된다.
  • 'Hello World'.replace('World','$&'); $&는 첫번째 인수

3.6 split(separator,limit);

  • separator을 기준으로 문자열,정규표현식을 나눠서 새로운 배열로 반환한다.
  • const str = 'How are you doing?';
  • console.log(str.split(' ')); // ['How','are','you',doing?']

3.7 substring(start,end);

  • start번째 인덱스부터 end번째 이전인덱스까지 반환한다.
  • start>end면 둘을 교환한다.
  • end 생략되면 start부터 끝까지 반환한다.
  • 인수<0 ,NaN이면 0으로 취급한다.
  • 문자열 길이보다 큰 인수 들어가면 str.length로 잡는다.
  • 'Hello'.substring(1,4); // ell

3.8 slice(start,end);

  • start부터 end 이전문자까지 잘라서 반환한다.

3.9 toLowerCase();

  • 모두 소문자로 만들어버린다.

3.10 toUpperCase();

  • 모두 대문자로 만들어버린다.

3.11 trim();

  • 문자열 양쪽 끝의 공백문자 제거한 문자열 반환

3.12 repeat(count);

  • count번 반복해서 새 문자열 반환

3.13 include(searchString,position);

  • searchString이 문자열에 포함돼 있으면 true 없으면 false

 

 

알고리즘 문제 풀기

1. 서울에서 김서방 찾기

seoul은 배열이고, 배열의 원소 중에 "Kim"이 있는데 이게 몇번째 인덱스에 있는지를 알아내는 문제이다.

for문을 돌리면서 i번째 인덱스의 원소가 "Kim"과 일치할 때 의 i를 구하면 된다. 

 

function solution(seoul) {
    var index;
    for (var i=0;i<seoul.length;i++) {
        if (seoul[i] === "Kim") {
            index = i;
        }
    }
    var answer = '김서방은 '+String(index)+'에 있다';
    return answer;
}

 

2. 가운데 글자 가져오기

문자열이 'abcde'라고 치면 'c'를 반환하고 'abcd' 이면 'bc'를 반환하는 함수이다.

여러 방법이 있겠지만 여기서는 문자열이 있으면 양쪽에서 한 문자씩 지워가면서 나머지 문자가 1개 아니면 2개가 될 때 그 값을 출력하는 방법을 택했다. 그 값을 출력하기 위해 지울때마다 i를 하나씩 더했다.

function solution(s) {
    var a = s.length;
    var i = 0;
    var mid;
    while (a>=1) {
        if (a === 1) {
            mid = s[i];
            break;
        }
        if (a === 2) {
            mid = s[i]+s[i+1];
            break;
        }
        i++
        a = a-2;
    }
    var answer = mid;
    return answer;
}

 

3. 수박수박수

자연수n을 인자로 갖는 함수가 있고 이 함수는 n번만큼 수박수박수를 반복한다.

공백인 문자열에 수,박을 붙이는 방법을 택했고 홀수번째에는 수를, 짝수번째에는 박을 붙인다.

var Strings = '';
var su = '수';
var bak = '박';
function solution(n) {
    for (var i=0; i < n; i++) {
        if (i % 2 === 0) {
            Strings = Strings.concat(su);
        }
        else {
            Strings = Strings.concat(bak);
        }
    }
    var answer = Strings;
    return answer;
}