문제 : 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번 문제 풀이를 마치겠습니다.

'Programing > Baekjoon 문제 알고리즘(node.js)' 카테고리의 다른 글

11022번 A+B - 8  (0) 2022.02.28
11021번 A+B - 7  (0) 2022.02.25
1110번 더하기 사이클  (0) 2022.02.25
10952번 A+B - 5  (0) 2022.02.25
2884번 알람 시계  (0) 2022.02.25
Posted by englishmath
,