IT/Coding Test

[BOJ] 1748번 : 수 이어 쓰기 1

gaing 2024. 9. 27. 01:58

✏️ 문제

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