1~1000에서 각 숫자의 개수 구하기

예로 10 ~ 15 까지의 각 숫자의 개수를 구해보자

10 = 1, 0
11 = 1, 1
12 = 1, 2
13 = 1, 3
14 = 1, 4
15 = 1, 5

그러므로 이 경우의 답은 0:1개, 1:7개, 2:1개, 3:1개, 4:1개, 5:1개

+3 예시에서 1은 7개입니다. - 차우정, 2016/05/13 23:51 M D
※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.

308개의 풀이가 있습니다. 1 / 31 Page

파이썬3.4

from collections import defaultdict

d = defaultdict(int)
for n in range(1, 1001):
    for x in str(n):
        d[x] += 1

print(d)

2016/04/06 22:32

디디

※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.
count={ x:0 for x in range(0,10) }

for x in range(1,1001):
    for i in str(x):
        count[int(i)]+=1

print(count)

※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.

python 3.5.1+ 로 작성했습니다.

temp=[0,0,0,0,0,0,0,0,0,0] # 리스트 생성
for num in range(1,1001): #0~1000
  for tp in (str(num)): # 각 숫자를 배열로 취급하기 위해 string화 시킴
    temp[int(tp)]+=1 # 넣을땐 다시 int로 해서 temp에 넣음

for i in range(10): # 출력
  print(i,":",temp[i],"개")
※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.
C로 풀었습니다.

#include<stdio.h>

int main(void){
    int start, end, nam, mok;
    int i, k;
    int array[10]={0,1,2,3,4,5,6,7,8,9};    // 비교할 숫자들이 들어간 배열
    int check[10]={0,0,0,0,0,0,0,0,0,0};    // 비교 후에 count한 값이 들어갈 배열

    printf("두 숫자를 입력하시오.\n");
    scanf("%d", &start);
    scanf("%d", &end);

    for(i=start; i<end+1; i++){
        mok=i;
        while(mok>0){
            nam=mok%10;
                printf("%d  ", nam);
            for(k=0; k<10; k++){
                if(nam==array[k]){
                check[k]=check[k]+1;
                }
            }
            mok = mok/10;           
        }       
    }
    printf("\n");
    for(k=0; k<10; k++){
        if(check[k]!=0)
        printf("%d:%d개\t", k, check[k]);
    }
    printf("\n");   
}
※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.

파이썬 3.5.1 64

for x in range(10):print('%d: %d'%(x,''.join(map(str, range(1, 1001))).count(str(x))))

또는

_ = list(print('%d: %d'%(i, l.count(str(i)))) for i in range(10) for l in [''.join(map(str, range(1, 1001)))])

C++

#include <iostream>
using namespace std;

int main(){
  string li[1000];
  int result[10];
  for(int x=1;x<=1000;x++)
    li[x-1] = to_string(x);
  for(int x=0;x<1000;x++){
    for(int y=0;y<li[x].length();y++){
        int index = li[x].at(y) - '0';
      result[index] += 1;
    }
  }
  for(int x=0;x<10;x++)
    cout << result[x] << endl;
    return 0;
}

자바

public class MyClass {
    public static void main(String[] args) {
        int target = 1000;
        int[] list = new int[target];
        int[] result = new int[10];
        for(int x = 0; x < list.length; x++){
            list[x] = x;
        }
        for(int x = 0; x < result.length; x++) {
            result[x] = 0;
        }
        for(int x = 1; x < list.length+1; x++){
            char[] c = (""+x).toCharArray();
            for(char j:c){
                result[Character.getNumericValue(j)] += 1;
            }
        }
        for(int i:result){
            System.out.println(i);
        }
    }
}

0: 192 1: 301 2: 300 3: 300 4: 300 5: 300 6: 300 7: 300 8: 300 9: 300

+1 파이썬 소스는 봐도 무슨 의미인지 모르겠네요 ㅠㅠ 파이썬 공부중인데... - 타울, 2016/06/21 00:49 M D
+1 두번째 풀이에 _ = 이것으로 None 리스트를 처리할 수 있네요^^ - 디디, 2016/10/18 17:41 M D
※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.
int box[] = new int[10];//각 숫자를 저장할 공간
        for (int i = 1; i <= 1000; i++) {
            box[i%10]++;//일의 자리
            if (i>=10)  box[i/10%10]++;//십의 자리
            if (i>=100) box[i/100%10]++;//백의 자리
            if (i==1000) box[i/1000%10]++;//천의 자리
        }
        System.out.println(Arrays.toString(box));
※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.
result = [0, 0, 0, 0, 0,  0, 0, 0, 0, 0]
for j in range(1, 1001):
    for x in str(j):
        result[int(x)] += 1

print(result)
※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.
    public static void main(String[] args) {

        int box[] = new int[10];

        for(int i=1; i <=1000;i++){
            box[i%10]++;
            if(i>=10) box[(i/10)%10]++;
            if(i>=100) box[(i/100)%10]++;
            if(i==1000) box[1]++;
        }
        System.out.println(Arrays.toString(box));

    }

답은 : [192, 301, 300, 300, 300, 300, 300, 300, 300, 300]

※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.

정답은 이렇습니다. 0: 192개, 1: 289개, 2: 300개, 3: 300개, 4: 300개, 5: 300개, 6: 300개, 7: 300개, 8: 300개, 9: 300개

    static int count[] = new int[10];
    public void countNumbers(int n){
        int num  = n % 10;
        count[num] +=1;
        while(n > 10){
            n = n / 10 ;
            count[n%10] += 1;
        }
    }

    public void count(int n, int m){
        for(int i = n ;  i<=m ;i++){
            countNumbers(i);

        }
        for(int i = 0 ; i < 10 ;i++){
            System.out.print(i + ": " + count[i] +"개, " );
        }

    }

2016/04/11 21:34

xeo

※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.

Java Lambda 작성

IntStream.rangeClosed(1, 1000).mapToObj(x->String.valueOf(x)).map(w->w.split("")).flatMap(Arrays::stream).collect(Collectors.groupingBy(java.util.function.Function.identity(), Collectors.counting())).forEach((k,v)->System.out.println(k+":"+v));
※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.

풀이 작성

※ 풀이작성 안내
  • 본문에 코드를 삽입할 경우 에디터 우측 상단의 "코드삽입" 버튼을 이용 해 주세요.
  • 마크다운 문법으로 본문을 작성 해 주세요.
  • 풀이를 읽는 사람들을 위하여 풀이에 대한 설명도 부탁드려요. (아이디어나 사용한 알고리즘 또는 참고한 자료등)
  • 작성한 풀이는 다른 사람(빨간띠 이상)에 의해서 내용이 개선될 수 있습니다.
목록으로
코딩도장

코딩도장은 프로그래밍 문제풀이를 통해서 코딩 실력을 수련(Practice)하는 곳입니다.


언어별 풀이 현황
전 체 x 308
python x 131
기 타 x 54
java x 69
javascript x 5
cpp x 37
ruby x 1
php x 2
go x 2
cs x 5
objectivec x 1
r x 1