문제 : https://www.acmicpc.net/problem/2577 (백준 온라인 저지)
얼핏 보면 코드을 되게 길게 작성해야 할 것 같지만 각 숫자 개수가 저장될 변수를 배열의 인덱스로 사용하면 코드 길이를 줄일 수 있습니다.
let strMul = (A*B*C).toString();
A*B*C를 자릿수로 처리하기 위해 문자열로 저장합니다.
let stdoutArr = Array.from(new Array(10), e => { return 0;})
0~9 숫자의 개수가 저장될 배열을 선언 후 0으로 초기화합니다. 크기가 10인 배열은 0~9까지의 인덱스를 가지므로 배열의 각 요소에는 0~9 숫자의 개수가 저장될 수 있습니다.
for(let i in strMul){
A*B*C 문자열의 자릿수만큼 코드를 반복 수행합니다.
stdoutArr[strMul[i]] = stdoutArr[strMul[i]]+1;
strMul의 인덱스에 속한 값에 해당하는 stdoutArr의 인덱스에 속한 값을 1 증가시킵니다. 말이 좀 어려운데 쉽게 정리하면 다음과 같습니다.
-> strMul -> "17037300"
strMul[0] -> 1
stdoutArr[1] = stdoutArr[1]+1
stdoutArr[1] -> 1
strMul[1] -> 7
stdoutArr[7] = stdoutArr[7]+1
stdoutArr[7] -> 1
strMul[2] -> 0
stdoutArr[0] = stdoutArr[0]+1
stdoutArr[0] -> 1
strMul[3] -> 3
stdoutArr[3] = stdoutArr[3]+1
stdoutArr[3] -> 1
strMul[4] -> 7
stdoutArr[7] = stdoutArr[7]+1
stdoutArr[7] -> 2
...
이해가 되시나요? 즉 strMul 각 자릿수와 동일한 인덱스 번호를 가지는 stdoutArr 요소에 값이 1추가되는 것입니다.
for(let i in stdoutArr)
console.log(stdoutArr[i]);
자릿수 체크가 전부 끝났다면 for문을 돌려 stdoutArr의 각 요소를 출력합니다. 즉 stdoutArr에서 0~9인덱스들의 카운트 값들이 출력되는 것입니다.
이상으로 2577번 문제 풀이를 마치겠습니다.