[etc] 문자열 내마음대로 등


문자열 내 마음대로 정렬하기

문제 설명

고민

  • [“abce”, “abcd”, “cdx”] , n2일때 abce , abcd의 b가 같음..그럴때는 사전순으로 정렬하라고함.

그래서 sort()로 미리 정렬해놈

내 풀이

function solution(strings, n) {
    
    return strings.sort().sort(function(a,b){
        return a.charCodeAt(n) - b.charCodeAt(n);
    });
}

문자열 내림차순으로 배치하기

문제 설명

내 풀이

//방법 1
function solution(s) {
    return s.split('').sort(function(a,b){
        if( a>b) return -1;
        if( a<b) return 1;
        if( a==b) return 0;
    }).join('');
};
//방법 2
function solution(s) {
    return s.split('').sort().reverse().join('');
};


문자열 다루기

문제 설명

고민

  • 입력값 ‘1e22’ 지수형식이 들어올때 문제 발생

내 풀이

function solution(s) {
    // 1e22 가 들어올때 문제 발생
   return s.length == 4 || s.length == 6 ? !isNaN(s) : false 
}

//그래서 하나씩 돌림
function solution(s) {
    if(s.length == 4 || s.length == 6){
        s = s.split('').filter(function(data){
            return isNaN(data)
        })
        return s.length == 0 ? true : false;
    }
    
    return false;    
}


서울에서 김서방 찾기

문제 설명

고민 없음

내 풀이

function solution(seoul) {
    var where = seoul.indexOf("Kim")
    return `김서방은 ${where}에 있다` ;
}

소수 찾기

문제 설명

내 풀이 - 1 실패

// 이 방법은 하나씩 찾는 방법으로써 답은 맞지만 시간초과
function solution(n) {
    if( n == 0 || n == 1 ) return 0;
    var answer=0;
    for( var i=2 ; i<=n; i++){
        if( isPrime(i) ) answer++;
    };
    return answer;
}

function isPrime(n){
    if(n < 2) return false;
    for(var i=2; i<=n/2; i++){
        if(n % i == 0) return false;        
    }
    return true;
}

고민 많음

  • n까지 하나씩 돌리다 보면 O(n)의 시간복잡도 도 통과 못 할 수 있다.
  • 시간복잡도가 O(n) 되어야 한다. logN또는 √n 의 시간복잡도를 가져야 한다.
  • 에라토스테네스의 체 원리를 이용 -> 시간복잡도를 √n으로 해결

img

내 풀이

function solution(n) {
    let arr = [];

    // 빈 배열에 값 초기화 
    for (let i = 2; i <= n; i++) {
        arr[i] = i;
    }
    /*
    1 , 2 , 3 , 4, 5, 
    6, 7, 8, 9, 10
    11, 12, 13, 14, 15 .... 
    2의 배수 다 지우고 ,3배 배수 다 지우고 5의 배수 다지우고 6의 배수 다지우고
    % 여기서 4은 2의 배수이니깐 이미 지워짐, 6도 마찬가지
    그렇게 해서 남은게 소수란 이말이다
    */
    
    for (let i = 2; i <= n; i++) {
        if (arr[i] === 0) // 이미 체크된 수의 배수는 확인하지 않는다
            continue;

        for (let j=i+i; j<=n; j+=i) { // i를 제외한 i의 배수들은 0으로 체크
            arr[j] = 0;
        }
    };

    // 0이 아닌 수들은 모두 소수이므로 그것들의 갯수
    return arr.filter(function(data){
        if(data !== 0) return true;
    }).length;
}

수박수박수박수

문제 설명

고민 없음

내 풀이

function solution(n) {
    //쓸데없이 배열만들어서 어렵게 했네..
    var arr = new Array(  parseInt( n/(2) )  ).fill("수박");
    if( n%str.length != 0) arr.push("")
    return  arr.join('');
}

function solution(n) {
    return '수박'.repeat(n/2) + (n%2 === 1 ? '' : '');
}

문자열을 정수로 바꾸기

문제 설명

고민 없음

내 풀이

function solution(s) {
    return Number(s);
}
function strToInt(str){
  return str/1
}

시저암호

문제 설명

고민 없음

  • 지금 생각해보니 굳이 배열로 하지 않고 그냥 해도 될듯함.

내 풀이




function solution(s, n) {
    var answer = '';
    var code = [
        'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 
        'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 
        'T', 'U', 'V', 'W', 'X', 'Y', 'Z'
    ]
    
    return s.split('').map(function(data){
        if( data == ' ') return ' ';
        
        
        if( isFirstLetterCapital(data) ){
            var index = code.indexOf(data)
            if( index + n < code.length ){
                return code[index+n];
            }else{
                return code[ index+n-code.length ];
            }
        }else{
            var index = code.indexOf(data.toUpperCase())
            if( index + n < code.length ){
                return code[index+n].toLowerCase();
            }else{
                return code[ index+n-code.length ].toLowerCase();
            }
        }
        
    }).join('')

}
//대문자 체크
function isFirstLetterCapital(string) {
    return string.charCodeAt(0) === string.toUpperCase().charCodeAt(0);
}


약수의 합

문제 설명

내 풀이

function solution(n) {
    var answer = 0;    
    for (let i=1; i<=n; i++){
        if(n%i ===0) answer += i;
    }    
    return answer;
}

이상한 문자 만들기

문제 설명

내 풀이



function solution(s) {
    
    return s.split(' ').map(function(data){
        var str='';
        for( var i=0 ; i<data.length; i++ ){
            if( (i+1)%2 == 0 ){
                str+=data[i].toLowerCase()
            }else{
                str+=data[i].toUpperCase()
            }
        }
        return str
    }).join(' ');
}



자릿수 더하기

문제 설명

내 풀이


function solution(n)
{
    return (n+'').split('').reduce(function(a,b){
        return (a/1)+(b/1);
    })/1;
}






© 2017. by isme2n