본문 바로가기
Algorithm/Goorm

[JavaScript] 369 게임

by 동그란 혜주 2020. 1. 3.

문제 설명

여름을 맞아 친구들과 여행을 간 구름이는 369게임을 하게 됐다. 369게임은 여러명이 둘러앉아서 숫자를 하나씩 돌아가며 말하다가 숫자에 3,6,9가 포함된 숫자가 되면 박수를 치는 게임이다.

(이 때, 해당 숫자에 3,6,9가 여러개이면 박수를 개수만큼 쳐야한다. 예를 들어 33, 36의 경우 박수를 두 번 쳐야 한다)

게임이 끝난 숫자 N이 주어졌을 때, N 이전까지 박수를 친 횟수를 구하여라.

입/출력 예시

입력 출력
10 3
35 16

Thinking 1

const readline = require("readline");
const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
});
const game365 = (end) => {
    let clap = 0;
    const regex365 = /3|6|9/g;
    for (let i = 1; i <= end; i++) {
        if (regex365.test(i)) clap++;
    }
    return clap;
};

rl.on("line", function(stage) {
    console.log(game365(stage));
    rl.close();
}).on("close", function() {
    process.exit();
});
  • 채점결과
    • 20/100

완벽하다고 생각했으나.. 예상치 못한 결과가 나왔다. 입력 값을 35로 주고 해당 알고리즘을 돌려보니 30, 32, 34 인 경우에는 해당 조건문을 통과하지 않는 다는 것을 알게되었다. 어떤 부분을 수정해야 해당 경우를 만족할 수 있을까..!

완성 코드

const readline = require("readline");
const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
});
const game365 = (end) => {
    let clap = 0;
    const regex365 = /3|6|9/g;
    for (let i = 1; i <= end; i++) {
        clap += (String(i).match(regex365) || []).length;
    }
    return clap;
};

rl.on("line", function(stage) {
    console.log(game365(stage));
    rl.close();
}).on("close", function() {
    process.exit();
});

test() 함수를 사용하지 않고, match() 를 사용하여 반환되는 배열의 길이를 더해주는 방식으로 수정하였더니 통과했다. 아까의 방법에서 어떤 부분이 문제였는지는 찾지 못했다..!


문제 출처

'Algorithm > Goorm' 카테고리의 다른 글

[JavaScript] 시험성적 평균과 등급 구하기  (0) 2020.01.04
[Java] 의좋은 형제  (0) 2020.01.04
[Java] 태민이의 취미  (0) 2020.01.03

댓글