✏️ 문제
1부터 N까지의 수를 이어서 쓰면 다음과 같이 새로운 하나의 수를 얻을 수 있다.
1234567891011121314151617181920212223...
이렇게 만들어진 새로운 수는 몇 자리 수일까? 이 수의 자릿수를 구하는 프로그램을 작성하시오.
🖥️ 입출력 예시
🗒️ 풀이
모범 답안
/* 초기 세팅 */
// 파일 읽기 기능 사용
const fs = require("fs");
// 실행 환경에 따라 입력 경로 다르게 설정
const filepath = process.platform === "linux" ? "/dev/stdin" : "./input.txt";
// 입력을 읽고, 문자열로 변환한 뒤, 공백을 제거하고, 각 문자를 배열로 나눔
const input = fs.readFileSync(filepath).toString().trim().split("\n");
/* 문제 풀기 */
let number = 0; // 선언
for (let i = 1; i <= input; i *= 10) {
number += input - i + 1;
console.log(number); // 1자릿수, 2자릿수 더한 값 확인
}
// 결과 출력
console.log(number); // 최종 자릿수
내 눈높이에 맞는 답안
/* 초기 세팅 */
// 파일 읽기 기능 사용
const fs = require("fs");
// 실행 환경에 따라 입력 경로 다르게 설정
const filepath = process.platform === "linux" ? "/dev/stdin" : "./input.txt";
// 입력을 읽고, 문자열로 변환한 뒤, 공백을 제거하고, 각 문자를 배열로 나눔
const input = +fs.readFileSync(filepath).toString().trim().split("\n");
/* 문제 풀기 */
let result = 0; // 자릿수를 모두 합한 값을 저장하는 변수
let num = 1; // 현재 계산 중인 숫자 (1부터 input까지 증가)
let gijoon = 10; // 자릿수를 구분하는 기준 (10, 100, 1000, ...)
let jari = 1; // 현재 숫자의 자릿수 (1자리, 2자리, 3자리, ...)
while (num <= input) {
// num이 input보다 작거나 같을 때까지 반복
if (Math.floor(num / gijoon) == 0) {
// num이 현재 자릿수 범위 안에 있으면
num++; // num을 1 증가
result += jari; // 현재 자릿수 만큼 result에 더함
} else {
// num이 현재 자릿수 범위를 넘으면
gijoon *= 10; // 자릿수 기준을 10배로 늘림 (1자리 -> 2자리 -> 3자리, ...)
jari++; // 자릿수 1 증가
}
}
console.log(result);
'IT > Coding Test' 카테고리의 다른 글
[BOJ] 1475번: 방 번호 (0) | 2024.09.24 |
---|---|
[JAVA] 배열의 평균값 (0) | 2024.06.04 |
[JAVA] 나이 출력 (0) | 2024.06.04 |
[JAVA] 두 수의 차 (0) | 2024.06.04 |