Post

[Programmers] #120891 - 369게임 [Java][C++][Python]

자연수 order의 각 자리 숫자 중 3, 6, 9가 등장하는 횟수를 세는 워밍업 문제.

[Programmers] #120891 - 369게임 [Java][C++][Python]

문제 링크


1. 아이디어

주어진 수를 10으로 나눈 나머지로 마지막 자리를 얻고 10으로 나눠 자리를 줄이는 과정을 반복하며, 그 자리 숫자가 3, 6, 9 중 하나인 횟수를 센다.


2. 복잡도

접근시간공간
풀이$O(\log N)$$O(1)$

($N$ = 입력값 order)


3. 코드

풀이 [Java][C++][Python]

1
2
3
4
5
6
7
8
9
10
11
12
class Solution {
    public int solution(int order) {
        int cnt = 0;
        while (order > 0) {
            int r = order % 10;
            if (r == 3 || r == 6 || r == 9) cnt++;
            order /= 10;
        }

        return cnt;
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <bits/stdc++.h>
using namespace std;

int solution(int order) {
    int cnt = 0;
    while (order > 0) {
        int r = order % 10;
        if (r == 3 || r == 6 || r == 9) cnt++;
        order /= 10;
    }

    return cnt;
}
1
2
def solution(order):
    return sum(c in "369" for c in str(order))

str(order)로 각 자리를 문자로 훑으며 c in "369"로 그 자리가 3, 6, 9 중 하나인지 판정한다. c in "369"True/False를 내놓고 파이썬에서 True는 1, False는 0으로 더해지므로, 제너레이터 식을 sum에 넘기면 조건을 만족하는 자리의 개수가 그대로 나온다.


This post is licensed under CC BY 4.0 by the author.