꾸준한 개발자

계속적인 성장을 추구하는 개발자입니다. 꾸준함을 추구합니다.

계속 쓰는 개발 노트

JAVASCRIPT/자바스크립트 알고리즘

알고리즘 연습문제 (1~10000의 숫자 중 8이 등장하는 횟수 구하기 / 이상한 문자 만들기)

gold_dragon 2020. 9. 18. 19:10

1. 1 ~ 10,000의 숫자 중 8이 등장하는 횟수 구하기 (Google)

1부터 10,000까지 8이라는 숫자가 총 몇 번 나오는가? 이를 구하는 함수를 완성하라.

단, 8이 포함되어 있는 숫자의 갯수를 카운팅 하는 것이 아니라 8이라는 숫자를 모두 카운팅 해야 한다. 예를 들어 8808은 3, 8888은 4로 카운팅 해야 한다.

(hint) 문자열 중 n번째에 있는 문자 : str.charAt(n) or str[n]

function getCount8() {
    let str = '';
    let result = 0;
    for (let i = 1; i <= 10000; i++) str += i;
    for (let j = 0; j < str.length; j++) {
        if (str[j] === '8') ++result;
    }
    return result;
}
console.log(getCount8()); // 4000

2. 이상한 문자 만들기

toWeirdCase함수는 문자열을 인수로 전달받는다. 문자열 s에 각 단어의 짝수번째 인덱스 문자는 대문자로, 홀수번째 인덱스 문자는 소문자로 바꾼 문자열을 리턴하도록 함수를 완성하라.

예를 들어 s가 ‘hello world’라면 첫 번째 단어는 ‘HeLlO’, 두 번째 단어는 ‘WoRlD’로 바꿔 ‘HeLlO WoRlD’를 리턴한다.

주의) 문자열 전체의 짝/홀수 인덱스가 아니라 단어(공백을 기준)별로 짝/홀수 인덱스를 판단한다.

function toWeirdCase(s) {
    let result = '';
    let count = 0;

    for (let i = 0; i < s.length; i++) {
        result += count % 2 === 0 
                ? s[i].toUpperCase() : s[i].toLowerCase();
        count = s[i] === ' ' ? 0 : ++count;
    }

    return result;
}
console.log(toWeirdCase('hello world')); // 'HeLlO WoRlD'
console.log(toWeirdCase('my name is lee')); // 'My NaMe Is LeE'