> JavaScript 문제 : 1의 개수

susu.J·2020년 6월 14일
0

문제 : 1의 개수

0부터 1000 까지 1의 개수를 세는 프로그램을 만들려고합니다.
예를 들어 0부터 20까지 1의 개수를 세어본다면, 1,10,11,12,13,14,15,16,17,18,19
각각 1이 들어가므로 12개의 1이 있게됩니다. 11은 1이 2번 들어간 셈이죠

그렇다면 0부터 1000까지의 수에서 1은 몇번이나 들어갔을까요 ?
출력해주세요 !

풀이
일단 숫자를 늘어뜨릴거다 .
123456789101112 이런식으로 하나의 문자열로 다 붙여 넣는다.
그런다음 여기서 1의 개수를 센다.

ES6에서는 for in 문과 for of문을 제공을 한다.
여기서 for of 문을 사용해보겠다.

🌟1. for of문 적용


.
.


만약에 k가 1 이라면 count해줄거야! 라고 if문을 써서 적용한다.
그리고 위에 카운트라는 변수가 없으니까 위에 하나 써주기 let count = 0;


콘솔로그로 count를 찍어보면..


이렇게 7이 나온다.
0부터 14까지의 숫자 중에서 1이들어가는 숫자는 7개라는 것!

이제 i<15라고 지정한 수를 i<1001로 하면, 1000까지 1이들어가는 1의 갯수를 알 수 있을 것이다.

🌟2. for in문 적용

아래 코딩을 차근차근 살펴보자.


여기서 for in을 썼더니 23이 나왔다.
이 23이 어떻게 나오게 된 숫자일까?
이 s에 대한 각각의 string의 인덱스를 이 k가 받는거다.
즉, 인덱스는 총 23개가 있다는 것이다.

그럼 이번엔 어떻게 풀까?

이번에는 k를 s의 인덱스로 주면된다

아예 순회를 안하는 방법도 있다.

정규표현식으로 푸는 방법이있다.
s에 matching되는 것을 뽑아낼 수 있는데,
1로 매칭되는 것을 전체 다(g) 뽑아내겠다!
한다면 하나의 어레이가 만들어진것을 확인 할 수 있다.

..
그럼 여기서 length를 출력해주면 1의 길이가 나오겠네?

결과는 나온다 .

너무 신기하다

고전적이고 비효율적인방법

접근방법: 10 11 1.. 998 999
이런식으로 10의 나머지 연산을 각 10으로 나눠준 값을 다시 원래 변수에 넣어주는 것을 반복
998%10 하면 나머지 8, 998/10 하면 몫은 99 -> 99가 앞으로가서
99%10 = 나머지9 , 99/10 = 몫 9 -> 9가 앞으로가서
9%10 = 나머지 9 , 9/10 = 몫이 0이되서 이때 반복문을 종료함

1) const 오브젝트를 만들거고 이 오브젝트는 배열로만들어준다.
2) for let i = 0 그리고 i = 1000보다 작을때까지 i는 하나씩 증가
3) tmp라는 변수를 만들어서 i를 넣는다. tmp를 반복한다.
4) 나머지연산과 나누기 연산을 반복한다.
5) tmp가 0보다 클때까지 계속 반복한다. while (tmp>0)
6) let num 이 넘은 나머지를 연다.
7) 만약에 오브젝트에 num의 키를 가진것이 있다면 오브젝트의 num에 하나만 증가시키면 된다 .
8) 그렇지 않다면 오브젝트의 num에 1을 넣는다.
9) 마지막으로 이 임시 변수에 10으로 나눈 몫을 10으로 나누고, 10진수를 넣는다. tmp = parseInt(tmp / 10, 10)
10) 여기서 우리가 알고싶은 것을 1의 갯수이니 console.log(obj[1]) 오브젝트에 1을 넣으면 계산할 수 있다.

profile
on the move 👉🏼 https://sjeong82.tistory.com/

0개의 댓글