A = int(input()) B = int(input()) C = int(input()) dic = {} #dictionary container인 변수 dic 선언 res = str(A*B*C) #A*B*C의 결과값을 string타입으로 저장 for a in res: #char형 변수 a가 res를 돌면서 if int(a) in dic: #dic에 있으면 dic[int(a)]=dic[int(a)]+1 #key값 int(a)를 가진 value값을 1증가 else: #dic에 없으면 dic[int(a)]=1 #key값 int(a)를 가진 value값을 1으로 설정 for i in range(10): if i in dic: #i가 0부터 9까지 순회하며 dic에 있다면 print(dic[i]) #key값 i를 가진 value값 출력 else: #dic에 없다면 print(0) #0을 출력
먼저 A, B, C를 입력받는다.
그 후 dictionary라는 컨테이너를 이용하여 결과값에 각 숫자가 몇개 있는지 확인할 것이다.
정수로 결과값을 다루기엔 복잡하니까(불가능하지는 않음) 문자열로 문제를 해결할 것이다. 따라서 res
변수에 A, B, C를 곱한 값을 문자열로 변환하여 저장한다.
처음에 그냥 딕셔너리에 추가하려니까 keyError가 났다. 찾아보니까
for a in res:
dic[a]+=1
이렇게 하면 keyError가 난다. 왜냐하면 dictionary안에 해당 key가 존재하지 않기 때문이다...C는 그런거 없는데ㅠㅠ
즉, 초기화되지 않은 key값을 1증가시키려고 하니까 없는데 '어떻게 증가시켜?' 라면서 Error를 가져다 준다. 그래서 if문을 이용하여 해결해 주면 된다.
for a in res:
if a in dic:
dic[a]=dic[a]+1
else:
dic[a]=1
a가 res안에 있으면(key값에 있으면) a를 key값으로 하여 그 value값을 1 증가시킨다.
만약 a가 res안에 없으면 a를 key값으로 value값을 1로 설정한다.
쉽게 설명하면, dic = {a : 1}
이면 dic[a] += 1
하여 {a : 2}
로 만들고
dic = {}
이면 dic[a] = 1
로 해서 {a : 1}
로 만들라는 얘기다.
풀이를 끝내고 다른 사람들의 풀이를 확인해 보니 count
라는 함수를 알게 되어 다시 풀어보았다.
A = int(input())
B = int(input())
C = int(input())
res = list(str(A*B*C))
for i in range(10):
print(res.count(str(i)))
res를 리스트로 만들어서 각 숫자를 리스트의 원소로 저장하고 count
라는 함수를 사용하여 res안에 숫자 i가 몇 개가 있는지 세어서 출력하면 끝....
#include <map> #include <string> #include <iostream> using namespace std; int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); int a, b, c; map<char,int> m; cin >> a >> b >> c; string mul = to_string(a*b*c); for (char a : mul) { m[a]++; } for (int i = 0; i <= 9; i++) { cout << m[i + '0'] << '\n'; } }
파이썬의 dictionary와 비슷하게 C에서는 map이 있다.
헤더에 <map>
을 선언해주고 map<type, type> map_variable
이런 식으로 map container를 만들어 주면 된다. 파이썬의 dictionary와 비슷하게 생각해서 풀이하면 된다.