문제 및 제한사항
머쓱이는 친구들과 369게임을 하고 있습니다. 369게임은 1부터 숫자를 하나씩 대며 3, 6, 9가 들어가는 숫자는 숫자 대신 3, 6, 9의 개수만큼 박수를 치는 게임입니다. 머쓱이가 말해야하는 숫자 order가 매개변수로 주어질 때, 머쓱이가 쳐야할 박수 횟수를 return 하도록 solution 함수를 완성해보세요.
**제한사항**
1 ≤ order ≤ 1,000,000
풀이 방법
풀이 방법은 3가지다.
1) if문
order가 정수이기에 문자로 바꿔주고, 해당 인덱스의 값을 3으로 나눴을 때 나머지가 0이면 1씩 더하게 했다.
여기서 킥은 해당 인덱스의 값이 0일 때에도 3으로 나누면 0이 나온다는 것이라서, 0이 아니라는 조건도 추가해주었다.
2) 정규 표현식
(어제오늘 정규 표현식을 배워서 이렇게 풀어봤는데 chatGPT말로는 수가 커질 수록 효율적인 코드가 아니라고 한다 ^_^;)
먼저 order를 문자로 바꿔주는 것은 동일하고, regex = /[369]/g; 라는 정규 표현식을 써주었다.
처음에는 왜 g를 써야 하는지 몰랐는데 문자열 내의 모든 결과를 반환하기 위함이었다! 🧐
match했을 때 나오는 값 중에 자꾸만 null이 걸려 코드가 안 돌아갔다.
이유는 369 중 아무 것도 없을 때 null이 나오기 때문이어서, 이 때는 0이 나오게 조건문을 추가해주었다.
그리고 matches는 배열 형태이기 때문에 그 길이로 갯수를 파악했다.
3) 자릿수로 나눠주기
chatGPT가 추천한 방식이다. (흠...)
주어진 수를 10으로 나누었을 때 나머지가 3 또는 6 또는 9일 때 1씩 더해주는 while문을 작성한다.
그리고 벗어나 값을 또 10으로 나누어 자릿수 단위로 3, 6, 9를 찾아간다. 복잡한데...?
코드
function solution(order) {
let str = order.toString();
let clap = 0;
for (let i = 0; i < str.length; i++) {
if (str[i] !== '0' && str[i] % 3 === 0) {
clap += 1
}
} return clap
}
function solution(order) {
let str = order.toString();
let regex = /[369]/g;
let matches = str.match(regex);
if (matches === null) {
return 0;
}
return matches.length;
}
function solution(order) {
let count = 0;
while (order > 0) {
let digit = order % 10;
if (digit === 3 || digit === 6 || digit === 9) {
count++;
}
order = Math.floor(order / 10);
}
return count;
}
'⚙️ 코딩테스트' 카테고리의 다른 글
[JavaScript] 프로그래머스 코딩테스트 입문 : 숫자 찾기 (0) | 2023.03.27 |
---|---|
[JavaScript] 프로그래머스 코딩테스트 입문 : 약수 구하기 (0) | 2023.03.27 |
[JavaScript] 프로그래머스 코딩테스트 입문 : 피자 나눠 먹기(2) (0) | 2023.03.27 |
[JavaScript] 프로그래머스 코딩테스트 입문 : 외계행성의 나이 (0) | 2023.03.26 |
[JavaScript] 프로그래머스 코딩테스트 입문 : 가장 큰 수 찾기 (0) | 2023.03.26 |