본문 바로가기
바닐라코딩 사전학습/코드연습, 퀴즈, 과제

김서방 찾기 / 가운데글자 가져오기 / 수박수박수박수

by 꼬마보노 2021. 12. 24.

1. 김서방 찾기

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


배열의 인덱스를 찾아서 출력하는 것이므로 https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array 에서indexOf를 찾아서 사용하였다.
처음에는 위와같이 return 값에 문자열 + answer + 문자열을 return에 직접 입력하는 방식으로 풀이하였다.

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

C언어같이 printf에 변수를 넣는 방식은 없을까 해서 인터넷에서 검색했더니 자바스크립트 ES6버전부터는 문자열을 ` `(벡틱)안에 넣고 변수는 ${변수}로 처리하면 가능하다는 글이 있어서 위와같이 작성하였다.
처음에는 ` 벡틱과 ' 작은따옴표를 헷갈려서 자꾸 오류가 났었는데 제대로 썼더니 기대하던 결과가 나오게 되었다.

 

2. 가운데글자 가져오기

아이디어

s의 문자열길이를 알아낸 후 글자수가 홀수일 경우 /2를 하면 가운데 글자의 자릿수 -1이 정수로 나오게 된다. 따라서 자릿수/2 + 1을 하면 가운데 글자가 몇번째인지 알 수 있다. - .length 사용
짝수의 경우 /2와 /2+1 자릿수에 있는 두 글자 모두 가운데 글자이므로 두 글자를 출력해준다.


결과 : 

function solution(s) {
    if(s.length%2 === 1){
        var answer = s[s.length/2 + 1];
    }else if(s.length%2 === 0){
        var answer = s[s.length/2] + s[s.length/2 + 1];
    }
    return answer;
}

위와같이 코드를 작성하였을 때 문자열이 홀수일때의 값은 undefined, 짝수일때의 값은 가운데 두개가 아닌 그 다음 두개의 문자가 출력되었다.
undefined의 경우는 크롬개발자도구로 확인해 본 결과 / 연산을 하게되면 2.5가 출력되었다. C언어에서 int형에 / 연산을 했을 때 소숫점은 버리고 정수만 저장하던 방식과는 다르게 JS에서는 변수타입을 따로 설정해주지 않았으므로 소숫점까지 저장되었다. 문자열도 배열의 일종이기 때문에 소숫점의 배열요소는 가지지 못하므로 undefined가 출력되었다.
제대로 된 자릿값이 출력되지 않은 이유는 마찬가지로 배열이기 때문에 index가 0부터 시작하는 것을 간과하였다. 따라서 아래와 같이 작성하였더니 제대로 출력되었다.

function solution(s) {
    if(s.length%2 === 1){
        var answer = s[s.length/2 - 0.5];
    }else if(s.length%2 === 0){
        var answer = s[s.length/2 - 1] + s[s.length/2];
    }
    return answer;
}

3. 수박수박수박수

아이디어:

n이 홀수, 짝수에 따라 나누어서 생각한다.

function solution(n) {
    var answer_odd = '';
    var answer_even = '';
    if(n%2 === 1){
        for(var i=0; i<(n/2)-1; i++){
            answer_odd = answer_odd + '수박'}
    };
    if(n%2 === 0){
        for(var i=0; i<n/2; i++){
            answer_even = answer_even '수박'}
    };
    return (n%2 === 1) ? answer_odd + '수' : answer_even; 
}

처음에는 위와같이 작성하였다. 이전 답안에서 보았던 ?연산자를 이용해서 return 값을 출력하였다. 코드작성 후, 반복되는 문자열을 출력해주는 js메서드로 .repeat(n)가 있었다.
예를 들어 '수박'.repeat(2); 를 작성하면 '수박수박'이 나오게 된다. .repeat()을 이용하면 간단한 코드를 생성할 수 있다.

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

문자열을 더하는 것이므로 소괄호를 넣어서 + 연산을 해야한다. 소괄호를 넣지 않으면 제대로 된 결과가 나오지 않는다.

 

**if조건식은 0또는 1로 실행을 결정하기 때문에 if(n%2 === 1)이 아닌 if(n%2)만을 썼을 때 1또는 0의 값을 가지게 할 수 있다.

function solution(n) {
    var answer_odd = '';
    var answer_even = '';
    if(n%2){
        for(var i=0; i<(n/2)-1; i++){
            answer_odd = answer_odd + '수박'}
    }else{
        for(var i=0; i<(n/2); i++){
            answer_even = answer_even + '수박'
        }
    };
    return (n%2 === 1) ? answer_odd +'수' : answer_even; 
}

'바닐라코딩 사전학습 > 코드연습, 퀴즈, 과제' 카테고리의 다른 글

Primitive / Reference 퀴즈  (0) 2021.12.27
Scope Quiz  (0) 2021.12.27
Craousel  (0) 2021.12.24
Background Changer  (0) 2021.12.24
Exercise - FizzBuzz/Biggest Number/Word position  (0) 2021.12.24