[알고리즘 1주차] 문자열과 해싱

Urther·2021년 10월 5일
0

알고리즘

목록 보기
7/41
post-thumbnail

ctrl+alt+M : code is running 이라고 뜰 때

1. 회문 문자열

회문 문자열이란? 읽을 때나 뒤에서 읽을 때나 같은 문자열을 회문 문자열이라고 한다.

  • 대소문자는 가리지 않는다.
function solution(s){
  let answer="YES";

  s=s.toUpperCase();
  for(let i=0;i<(s.length)/2;i++){
    if(s[i]==s[(s.length-1)-i]){
      continue;
    }
    else{
      answer="NO"
      break;
    }
  }
  return answer;
}
let str="Goog";
console.log(solution(str));

알아야 할 함수:
toUpperCase() : 모든 문자열을 대문자로 변경한다.
toLowerCase() : 모든 문자열을 소문자로 변경한다.

2.특정 문자 뒤집기

function solution(s){
  let answer="";
  let lt=0,rt=s.length-1;
  const isAlpha=/[a-zA-Z]/;

  s=s.split('');
       // string type은 교환 안된다. => 배열 형태로 바꾼다.
  while(lt<rt){
    if(!isAlpha.test(s[lt]))
      lt++;
    else if(!isAlpha.test(s[rt]))
      rt--;
    else{
      let tmp=s[rt];
      s[rt]=s[lt];
      s[lt]=tmp;
      lt++;
      rt--;

    }
  }
  
  return s.join('');
  // 배열의 원소를 연결하여 하나의 값으로 만드는 것

  // return s.split("").reverse().join("");
  // -> 문제점 : 특수문자는 그대로 사용한다 !
}
let str="a#b!GE*t@S";
console.log(solution(str));

알아야 할 포인트 : 정규식

  1. s[lt], 알파벳이 아니라면 lt++을 통해 옮겨준다.
  2. s[rt], 알파벳이 아니라면 rt++을 통해 옮겨준다.
  3. 두 개 모두 알파벳이라면 swap해준다.

주의할 점 :

      let tmp=s[rt];
      s[rt]=s[lt];
      s[lt]=tmp;

로 바로 swap 불가능하다.

  • s=s.split(''); 으로 배열화하고, s.join(''); 배열화를 다시 String으로 묶어줘야한다.

3. 학급 회장

투표한 후보의 기호(알파벳)이 쓰여져 있어서 한 명의 학급 회장이 선출될 수 있도록한다.

function solution(s){

  let answer;
  let sh=new Map();
  for(let x of s){
    sh.set(x, (sh.get(x)||0)+1);
  }
  let max=Number.MIN_SAFE_INTEGER;
  for(let[key,val] of sh){
    if(val>max){
      max=val;
      answer=key;
    }
  }
  return answer;

}
console.log(solution("BACBACCACCBDEDE"));
  1. sh.get(x)를 통해 만약, x라는 데이터가 hash안에 없다면 undefined(false)가 뜰 것이고 || (or) 연산자를 통해 0+1 총 1개가 되는 것이다.
    그렇게 hash 를 set 한다.



+ 알아야하는 함수 :

isNaN();

: isN(ot)aN(umber) 숫자가 아닌 것을 return한다. true가 나온다면 이것은 문자열이라는 것이다. ex) isNaN("Hello3")


.split(자르는 기준이 되는 문자열)

:str.split(" ") 고, str="hello world" 라면, str을 출력하게 될 때 str=['hello','world'] 로 출력이 된다. 다시 문자열로 합치려면 str.join(" ");


.substring(시작index, 끝나는index+1)

var anyString = 'Mozilla';
// Displays 'Mozill'
console.log(anyString.substring(0, 6));
profile
이전해요 ☘️ https://mei-zy.tistory.com

0개의 댓글