Link
문제
세 개의 자연수 A, B, C가 주어질 때 A × B × C를 계산한 결과에 0부터 9까지 각각의 숫자가 몇 번씩 쓰였는지를 구하는 프로그램을 작성하시오.
예를 들어 A = 150, B = 266, C = 427이라면 A × B × C = 150 × 266 × 427 = 17037300 이 되고, 계산한 결과 17037300 에는 0이 3번, 1이 1번, 3이 2번, 7이 2번 쓰였다.
입력 > 첫째 줄에 A, 둘째 줄에 B, 셋째 줄에 C가 주어진다. A, B, C는 모두 100보다 크거나 같고, 1,000보다 작은 자연수이다.
출력 > 첫째 줄에는 A × B × C의 결과에 0 이 몇 번 쓰였는지 출력한다. 마찬가지로 둘째 줄부터 열 번째 줄까지 A × B × C의 결과에 1부터 9까지의 숫자가 각각 몇 번 쓰였는지 차례로 한 줄에 하나씩 출력한다.
| 예제 입력
150
266
427
| 예제 출력
3
1
0
2
0
0
0
2
0
0
제출
const input = (
process.platform === "linux"
? require("fs").readFileSync("/dev/stdin").toString()
: `150
266
427`
).split("\n");
const result = String(input[0] * input[1] * input[2]);
for (let i = 0; i < 10; i++) {
console.log(result.split(i).length - 1);
}
풀이과정
split() 메서드 를 사용해서 곱한 값을 i를 기준으로 나눈 배열의 개수를 출력한다.
console.log('17037300'.split(0)); // [ '17', '373', '', '' ]
console.log("17037300".split(3)); // [ '170', '7', '00' ]
결괏값인 17037300을 기준으로 split() 메서드를 사용해서 출력해보면
- split(0)의 경우, 0을 기준으로 17/0/373/0/0으로 나뉘기 때문에 결과값은 [ '17', '373', '', '' ]
- split(3)의 경우, 3을 기준으로 170/3/7/3/00으로 나뉘기 때문에 결과값은 [ '170', '7', '00' ]가 나오게 된다.
따라서 0부터 9까지 split(i)로 나눈 배열의 길이 -1을 해주면 결과값에서의 i의 개수를 알아낼 수 있다.
이중 for문 을 사용한 풀이
const input = (
process.platform === "linux"
? require("fs").readFileSync("/dev/stdin").toString()
: `150
266
427`
).split("\n");
const result = String(input[0] * input[1] * input[2]);
for (let i = 0; i < 10; i++) {
let count = 0;
for (let j = 0; j < result.length; j++) {
if (Number(result[j]) === i) {
count++;
}
}
console.log(count);
}
🔼 세 수를 곱한 result 값을 0부터 9까지의 숫자와 비교해서 같을 경우에 count를 증가시키고 해당 count를 출력한다.
개념
String.split()
- String 객체를 지정한 문자를 기준으로 여러 개의 문자열로 나눈다.
- 아래는 split()을 사용한 또 다른 문제이다.
Comment
'Algorithm > Baekjoon' 카테고리의 다른 글
[백준] 1546: 평균 (0) | 2022.06.17 |
---|---|
[백준] 3052: 나머지(javascript) (0) | 2022.06.15 |
[백준] 2562: 최댓값(javascript) (0) | 2022.06.14 |
[백준] 10818: 최소, 최대(javascript) (0) | 2022.06.14 |
[백준] 1110: 더하기 사이클(javascript) (0) | 2022.06.14 |