devlog of ShinJe Kim

[javascript] 프로그래머스|Level1|가운데 글자 가져오기

|

문제 설명 단어 s의 가운데 글자를 반환하는 함수, solution을 만들어 보세요. 단어의 길이가 짝수라면 가운데 두글자를 반환하면 됩니다.

제한 조건 s는 길이가 1 이상, 100이하인 스트링입니다.

입출력 예 예를들어 s가 “abcde”이면 “c”를 반환하고, “qwer”이면 “we”를 반환하면 됩니다.

나의 풀이

function solution(s) {
    var answer = '';
    var i = s.length/2;
    var j = s.length/2 - 0.5;

    if(s.length%2 === 0){
        answer += s[i-1]+s[i];
    }else{
        answer += s[j];
    }

    return answer;
}

다른 사람의 풀이

function solution(s) {
    return s.substr(Math.ceil(s.length / 2) - 1, s.length % 2 === 0 ? 2 : 1);
}

반올림 함수를 사용할 생각을 왜 안했을까. 파라미터 안에 삼항자를 넣어서 한줄로 표현할 수도 있다는 것을 알게 되었다.

[javascript] 프로그래머스|Level1|문자열 내 p와 y의 개수

|

문제 설명 대문자와 소문자가 섞여있는 문자열 s가 주어집니다. s에 ‘p’의 개수와 ‘y’의 개수를 비교해 같으면 True, 다르면 False를 return 하는 solution를 완성하세요. ‘p’, ‘y’ 모두 하나도 없는 경우는 항상 True를 리턴합니다. 단, 개수를 비교할 때 대문자와 소문자는 구별하지 않습니다.

예를들어 s가 pPoooyY면 true를 return하고 Pyy라면 false를 return합니다.

제한 조건

  • 문자열 s의 길이 : 50 이하의 자연수
  • 문자열 s는 알파벳으로만 이루어져 있습니다.

입출력 예 예를들어 str이 “pPoooyY”이면 ‘p’의 개수 2개, ‘y’의 개수 2개로 같으므로 true를 return 합니다. “Pyy”이면 ‘p’의 개수 1개, ‘y’의 개수 2개로 다르므로 false를 return 합니다.

나의 풀이

function solution(s){
    var count_p = 0;
    var count_y = 0;

    for(var i=0; i<s.length; i++){
        if(s[i] === 'p' || s[i] === 'P'){
            count_p++;
        }
        if(s[i] === 'y' || s[i] === 'Y'){
            count_y++;
        }
    }
    return (count_p === count_y) ? true : false;
}

다른 사람의 풀이

function solution(s){
    return s.toUpperCase().split("P").length === s.toUpperCase().split("Y").length;
}

toUpperCase 함수와 split 함수를 쓰면 이렇게 간단하게 해결이 되는 것을.. 사용하지 못하면 아는 것이 아니다. 반복 연습해야지!

[javascript] 프로그래머스|Level1|하샤드 수

|

문제 설명 양의 정수 x가 하샤드 수이려면 x의 자릿수의 합으로 x가 나누어져야 합니다. 예를 들어 18의 자릿수 합은 1+8=9이고, 18은 9로 나누어 떨어지므로 18은 하샤드 수입니다. 자연수 n을 입력받아 n이 하샤드 수인지 아닌지 검사하는 함수, solution을 완성해주세요.

제한 조건 x는 1 이상, 10000 이하인 정수입니다.

나의 풀이

function solution(x) {
    var sum = 0;
    var arr = String(x).split('');

    for(var i=0; i<arr.length; i++) {
        sum += Number(arr[i]);
    }

  return (x % sum == 0) ? true : false;
}

다른 사람의 풀이

function solution(x){
  return !(x % (x + "").split("").reduce((a, b) => +b + +a ));
}

[javascript] 프로그래머스|Level1|문자열을 정수로 바꾸기

|

문제 설명 문자열 s를 숫자로 변환한 결과를 반환하는 함수, solution을 완성하세요.

제한 조건

  • s의 길이는 1 이상 5이하입니다.
  • s의 맨앞에는 부호(+, -)가 올 수 있습니다.
  • s는 부호와 숫자로만 이루어져있습니다.
  • s는 0으로 시작하지 않습니다.

입출력 예 예를들어 str이 “1234”이면 “1234”를 반환하고, “-1234”이면 “-1234”를 반환하면 됩니다. str은 부호(+,-)와 숫자로만 구성되어 있고, 잘못된 값이 입력되는 경우는 없습니다.

나의 풀이

function solution(s) {
    return Number(s);
}

자바스크립트 함수를 쓰니 너무 간단하게 해결이 된다. 내장 함수를 쓰지 않고 풀어보는 것도 도전해 보아야겠다.

[javascript] 프로그래머스|Level1|서울에서 김서방 찾기

|

문제 설명 String형 배열 seoul의 element중 “Kim”의 위치 x를 찾아, 김서방은 x에 있다는 String을 반환하는 함수, solution을 완성하세요. seoul에 “Kim”은 오직 한 번만 나타나며 잘못된 값이 입력되는 경우는 없습니다.

제한 조건

  • seoul은 길이 1 이상, 1000 이하인 배열입니다.
  • seoul의 원소는 길이 1 이상, 20 이하인 문자열입니다.
  • “Kim은” 반드시 seoul 안에 포함되어 있습니다.

나의 풀이

function solution(seoul) {
    var answer = '';

    if(seoul.length<1 || seoul.length>1000){
        return false;
    }

    for(var x=0; x<seoul.length; x++){
        if(seoul[x]<1 || seoul[x]>20){
            return false;
        }

        if(seoul[x] === 'Kim'){
            answer = "김서방은 "+x+"에 있다";
            break;
        }
    }
    return answer;
}

다른 사람의 풀이

function solution(seoul) {
  	var x = seoul.indexOf('Kim');
  	return "김서방은 " + x + "에 있다";
}

for문으로 돌리는 것밖에는 생각하지 못했었는데 indexOf로 깔끔하게 작성한 풀이를 보았다. 다른 사람의 풀이를 볼 때마다 느끼는 것은, 모르는 것이 아닌데도 막상 문제를 받으면 늘 하던 방식인 단순한 if문이나 for문밖에 생각이 나지 않는다는 것이다. 의도적으로 다른 방식을 찾아보려는 연습을 해야겠다.