코딩도장

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개

2016年04月06日 22:12

hana11

(追記) (追記ここまで)
댓글 작성은 로그인이 필요합니다.
+5 예시에서 1은 7개입니다. - 차우정, 2016年05月13日 23:51 M D
(注記) 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.

731개의 풀이가 있습니다. 1 / 74 Page

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)

2016年05月14日 16:57

[email protected]

댓글 작성은 로그인이 필요합니다.
정말 판타스틱하네요. - Shin gil sang, 2019年01月02日 09:35 M D
딕셔너리 이용한 코드 예술이네요 - 이명운, 2019年08月27日 14:30 M D
예술입니다. - Sean, 2019年12月19日 18:24 M D
문자열에 대해서도 for문을 사용할 수가 있군요.. for i in str():과 같이 쓰면 맨 앞 문자열부터 훑고 가는거였군요,! 또 하나 배워갑니당 - 코딩뚜, 2021年01月04日 16:32 M D
질문이 있습니다. count={ x:0 for x in range(0,10) } 에서 x:0의 의미가 뭔지요? - DongKyu Lee, 2021年06月08日 11:52 M D
저도 질문이 있습니다. count={ x:0 for x in range(0,10) } 라고 했는데, 이를 응용해서 "0" 부분도 for문을 이용해서 변경할수 있나요? variant= { x:y for x in range(0,10) for y in range(11,21 } 으로 하면 "y" 값이 "20"으로만 고정되서 나오네요 어떻게 해야 y 값을 11~20으로 할수 있을까요? - 가을아침, 2021年06月15日 14:31 M D
y 값을 변경하려면 x값을 함께 변경시켜야 합니다. 위의 방식으로 하면 먼저 만들어진 0:11은 그 후에 0:12로 바뀌고 마지막에 0:20으로 바뀐 후 1:11이 만들어지고 이것도 마지막에 1:20으로 바뀌게 됩니다. 결국 딕셔너리의 키 값은 같은 값이 하나만 존재할 수 있기 때문에 y의 마지막 값만 각 x에 할당됩니다. - ­박철희, 2021年09月13日 11:23 M D
(注記) 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.

파이썬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

디디

댓글 작성은 로그인이 필요합니다.
(注記) 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.
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));
댓글 작성은 로그인이 필요합니다.
깔끔합니다~ - 고요정, 2019年01月21日 13:05 M D
(注記) 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.

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],"개")
댓글 작성은 로그인이 필요합니다.
(注記) 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.

파이썬 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
(注記) 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.
for i in range(10):
 print "\t[ %s ] - %s개"%(i,''.join(map(str, range(1, 1001))).count(str(i)))

2017年05月18日 14:20

jinyyo

댓글 작성은 로그인이 필요합니다.
(注記) 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.
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"); 
}
댓글 작성은 로그인이 필요합니다.
(注記) 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.
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)
댓글 작성은 로그인이 필요합니다.
인트랑 스트링이랑 바꿔치는게 예술이네요 ᄃᄃ - 아울, 2020年05月05日 08:02 M D
(注記) 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.
 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]

2017年06月11日 20:23

kihyun lee

댓글 작성은 로그인이 필요합니다.
(注記) 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.

파이썬입니다. 원하는 숫자를 찾으면 딕셔너리의 값을 하나씩 올려서 갯수를 세는 방식입니다.

dic = {i:0 for i in range(0,10)}
for i in range(1,1001):
 for n in str(i):
 dic[int(n)]+=1
print(dic)

2018年07月25日 18:23

김준영

댓글 작성은 로그인이 필요합니다.
멋지네요 - sjm, 2019年04月21日 18:17 M D
(注記) 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.

풀이 작성

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

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


언어별 풀이 현황
전 체 x 731
python x 419
java x 117
기 타 x 101
javascript x 10
cpp x 54
ruby x 1
php x 3
go x 4
cs x 11
objectivec x 3
r x 4
lisp x 1
scala x 1
matlab x 1
perl x 1
코딩도장 © 2014 · 문의 [email protected]
피드백 · 개인정보취급방침 · RSS

AltStyle によって変換されたページ (->オリジナル) /