[js]알고리즘-가운데 글자 찾기

GY·2021년 5월 27일
0
post-thumbnail

   
   //테스트 코드
   s = ['abcde', 'qwer']

문자열의 문자수를 어떻게 셀 수 있을까?

        var getTextLength = function(str) {//str에 특정문자를 넣으면
        		var len = 0; //len이라는 변수는 0부터 시작하고
        		for (var i = 0; i < str.length; i++) {//넣은 문자의 길이만큼 반복되면서
        				 if (escape(str.charAt(i)).length == 6) {//i번째 
        						 len++; 
        					} 
        					len++;
        		} 
        		return len; }

        출처: https://solbel.tistory.com/413 [개발자의 끄적끄적]

JavaScript / Object / String.length / 문자열의 길이 반환하는 속성

length 함수는 이전에도 쓴 바 있으나, 배열의 수를 세기 위해 사용했었다

    //이렇게...
    product라는 배열이 있을 경우
    var length = product.length

그냥 사용하면 문자 수를 셀 수 있는 함수 였다.

    //예시
    abcde.length //4출력

문자 수를 센 후, 2로 나눠 해당 순서의 문자를 리턴하면 된다.

    //테스트 코드
    abcde.length //5출력
    5/2 //2.5출력
    var getTextLength = function(str) {
    		charAt(math.round((str.length/2)))

    		var len = 0; 
    		for (var i = 0; i < str.length; i++) {
    				 if (escape(str.charAt(i)).length == 6) {
    						 len++; 
    					} 
    					len++;
    		} 
    		return len; }

    var str = 'abcde' 
    str.length//5출력
    Math.round(str.length/2) //3출력
    //str.charAt(Math.round(str.length/2)) //d 출력...0번째가 곧 첫번째 문자이니 Math.round로 반올림이 아닌 버림을 해야한다.
    str.charAt(Math.floor(str.length/2))//c 출력! Math.floor로 str의 문자 수인 5를 반으로 나눠 2.5가 나왔을 때, 버림해 2번째 문자(01234중) 출력

    //짝수일때는 두 글자 모두 출력이 되어야 한다.
    var str2 = 'quer'
    str.length//2출력
    //결국, 조건문으로 짝수와 홀수 일 때를 직접 지정해주어야겠다.

    //홀수 일때
    If (str.length/2!==2){
    	str.charAt(Math.floor(str.length/2))
    //짝수일때
    else if (str.length===2

자바스크립트 소수점 버림, 올림, 반올림, 절사 방법

가운데 글자 찾기

입력된 문자 수를 반으로 나눈 후 , math.round함수로 반올림해 해당 숫자 순서의 글자를 반환하면 될 것 같다.

결국 조건문으로 짝수일때와 홀수일때를 나눠야할것같은데, 그러려면 나눗셈의 나머지를 구하는 연산자를 사용해야할것같다.(나머지가 0일때와 아닐때)

나머지 연산자 (%)

    //짝수일 때
    if(str.length%2===0){
    	str.charAt(str.length/2-1)
    	str.charAt(str.length/2) 
    // 홀수일 때
    else{str.charAt(Math.floor(str.length/2))
    function solution(s) {
    	if(s.length%2===0){
     
        var answer = s.charAt(s.length/2-1) 
    		var answer2 = s.charAt(s.length/2)
    	  return [answer,answer2]
    }
    	else if(s.length%2!==0){
    		var answer = s.charAt(Math.floor(s.length/2))
    		return answer;
    }
    		
    }

자바스크립트에서 여러값을 리턴해야하는데 어떻게해야하죠?

짝수일 경우에는 s.charAt(s.length/2-1), s.charAt(s.length/2); 두가지 경우의 값을 모두 한번에 리턴해야 했는데, 한번 리턴하고나면 해당 리턴문 아래로는 실행이 되지 않기 때문이다. 해당 글을 참고해 배열 형식으로 리턴했다.

이런..... 함께 출력해야 하나보다.

짝수일경우 가운데 구간의 문자열을 한번에 가져오기

[javascript] 문자열 자르기 (split, substring, substr)

substr()

substr(x,y) : x번째 문자부터 y길이만큼 문자 가져오기
substring : (x,y) x번째 부터 y번째까지 문자 가져오기
    function solution(s) {
    	if(s.length%2===0){
     
        var answer = s.substr(s.length/2-1,2)
    	  return answer;
    }
    	else if(s.length%2!==0){
    		var answer = s.charAt(Math.floor(s.length/2))
    		return answer;
    }
    		
    }
통과!!

이렇게 간결한 풀이도 있었다....

고민했던 것들

  • 처음에는 이렇게 접근했으나..한글을 포함한 문자 수를 세기 위함이었으므로 도중에 중단했다.

[javascript] 글자수 체크, 문자열 길이 구하기(한글 포함) [펌]

       var getTextLength = function(str) {
       		var len = 0; 
       		for (var i = 0; i < str.length; i++) {
       				 if (escape(str.charAt(i)).length == 6) {
       						 len++; 
       					} 
       					len++;
       		} 
       		return len; }
       

charAt 은 무엇일까?

    [charAt - 생활코딩](https://opentutorials.org/course/50/86)

    charAt은 index로 주어진 값에 해당하는 문자를 리턴한다.
        //출처 블로그에 나온 예시
        var stringName = 'coding everybody';
        alert(stringName.charAt(0)); // c

escape 함수는 무엇일까?

    [자바스크립트 escape(), encodeURI(), encodeURIComponent() 차이](https://baver.zetacode.com/entry/%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8-escape-encodeURI-encodeURIComponent-%EC%B0%A8%EC%9D%B4)

    대부분의 문자를 유니코드 형식으로 인코딩하는 함수이다.
profile
Why?에서 시작해 How를 찾는 과정을 좋아합니다. 그 고민과 성장의 과정을 꾸준히 기록하고자 합니다.

0개의 댓글