javascript, JQuery

[javascript] 1~1000까지 8이 총 몇 번 나오는지 구하기

cattaku 2021. 2. 2. 15:57

난 이 문제를 백엔드 개발 면접 때 코딩테스트로 받았던 문제였다. 손코딩으로 작성시간은 10분이 주어졌었다.
결과는 제대로 풀지 못했고, 면접에 떨어졌다.....고 생각하고 이글을 썼었는데...
면접 발표가 좀 늦게 나왔지만 합격하고 아직 잘 다니고 있다 ㅋㅋㅋㅋㅋ 
무튼 나중에 다시 이 문제를 풀어보았는데 처음에 이 문제를 보고 8이 들어간 숫자를 세는 문제로 착각해서 이렇게 풀었었다.
아래 코드와 같이 풀이를 하면 예를 들어 8, 88, 818, 888 이런 수도 단위에 상관없이 1개의 카운트로 올라가게 되서 총 카운트 값이 1000이 나왔다.

function getCount() {
  
  let num = [];
  for (let i = 1; i <= 10000; i++) {
      if (i%10 == 8) { num.push(i)}
  }
  return num;  
}
console.log(getCount());

근데 다른 풀이들과 답이 달랐고 그제서야 8이 들어간 숫자로 카운트를 하는 문제가 아닌 "8"의 카운터를 세는 문제라는걸 알았다. 참고로 우리집 남집사도 나처럼 풀었었다. ㅎㅎㅎ 10년차 개발자도 문제를 대충 보면 출제한 사람의 의도를 잘못 파악할 수 있다는거....!!
무튼 정확한 풀이는 아래 코드로 해야 "8"이 나올 때마다 카운터가 올라가서 4000이라는 값이 출력됐다.

function getCount() {
    
    let count = 0;
    let numStr = '';
    for (let i = 1; i <= 10000; i++) numStr += i;  
    //반복문을 돌면서 문자로 변환
    for (let j=0; j<numStr.length; j++) {
            if(numStr[j]==="8") { ++count;
            }
    }
    return count;
} 
console.log(getCount());