JavaScript

[JS] 코딩테스트 018 - 반올림, 올림, 버림 / parseInt

Irene1988 2025. 2. 16. 21:01
문제18 : 평균 점수

영하네 반은 국어, 수학, 영어 시험을 보았습니다.
영하는 친구들의 평균 점수를 구해주기로 했습니다.

공백으로 구분하여 세 과목의 점수가 주어지면
전체 평균 점수를 구하는 프로그램을 작성하세요.
단, 소숫점 자리는 모두 버립니다.

 

const score = prompt().split(' ');
let sum = 0;

for(let i=0; i < score.length; i++){
    sum = sum + parseInt(score[i], 10);
}

console.log(Math.floor(sum/score.length));

 

재복습!

//1. prompt를 통해 점수를 입력받는다.
//2. 입력받은 값을 공백으로 구분하여 배열로 저장한다.
//3. 세 과목 점수를 모두 더한다.
//4. 3번에서 모두 더한 값을 과목수대로 나눈다. (평균)
//5. 소숫점 자리는 모두 버린다. => Math.floor()사용
let scores = prompt('세 과목의 점수를 입력해주세요!').split(' ');

let sum = 0; 
for(let i=0;i<scores.length;i++){
    //console.log('score',i," ",scores[i]+" ");
    sum = sum +parseInt(scores[i], 10);
}

console.log('세 과목 합계: '+ sum);
console.log(Math.floor(sum/scores.length));

이렇게 하긴 했다.

근데 하다 보니 더 코드를 보강해야할 거 같다.

prompt로 입력받는 값이 100이 초과되면 안된다.

 

챗GPT에 위 문제에 대한 코드 보강을 요청해 보았다!

역사나 챗이다.

let sum = 0;
let average = 0;
let scores = prompt('점수 입력').split(' ')
            .filter(score => score) // 빈 문자열 제거
            .map(Number); // 숫자로 변환

console.log(scores);
document.write(scores); // 70,55,80

if(scores.some(score => isNaN(score) || score < 0 || score > 100)){
    console.log('올바른 점수를 입력하세요! 0~100 사이 숫자만 입력 가능!');
} else {
    sum = scores.reduce((acc, cur) => acc + cur, 0); //합계 계산
    average = Math.floor(sum/scores.length); // 평균 계산
}

console.log('세 과목 합계: ', sum);
console.log('평균 점수: ', average);

여기서... some()과 reduce()에 대해 알아봐야 할거 같다.

https://irene2023.tistory.com/58

 

[JS] some()과 reduce()에 대해~

🔹 some() 메서드란?📌 배열의 요소 중 하나라도 조건을 만족하면 true 반환📌 모든 요소가 조건을 만족하지 않으면 false 반환📌 filter()나 map()보다 빠르게 검사 가능 (하나만 찾으면 바로 종료됨)

irene2023.tistory.com

 


🔹 자바스크립트에서 숫자 반올림, 올림, 버림

자바스크립트에서는 Math 객체를 사용해서 숫자를 반올림하거나 올림/버림할 수 있어.

메서드 설명 예제 (입력 5.7) 결과
Math.round() 반올림 (소수점 .5 이상 올림, 미만 버림) Math.round(5.7) 6
Math.ceil() 올림 (무조건 위쪽 정수로 올림) Math.ceil(5.7) 6
Math.floor() 버림 (무조건 아래쪽 정수로 버림) Math.floor(5.7) 5
Math.trunc() 소수점 제거 (정수 부분만 반환) Math.trunc(5.7) 5

 


🔹 1. Math.round() - 반올림

Math.round()는 소수점 첫째 자리에서 반올림

console.log(Math.round(5.4)); // 5
console.log(Math.round(5.5)); // 6
console.log(Math.round(5.9)); // 6
console.log(Math.round(-5.5)); // -5 (음수도 동일한 반올림 규칙)

👉 소수점 .5 이상이면 올림, .5 미만이면 버림!


🔹 2. Math.ceil() - 올림

Math.ceil()은 무조건 올림

console.log(Math.ceil(5.1)); // 6
console.log(Math.ceil(5.9)); // 6
console.log(Math.ceil(-5.1)); // -5 (음수는 덜 마이너스된 방향으로 올림)

👉 소수점 이하 값이 있어도 무조건 올림!


🔹 3. Math.floor() - 버림

Math.floor()는 무조건 버림해.

console.log(Math.floor(5.9)); // 5
console.log(Math.floor(5.1)); // 5
console.log(Math.floor(-5.9)); // -6 (음수는 더 마이너스된 방향으로 버림)

👉 소수점 이하 값이 있어도 무조건 버림!


🔹 4. Math.trunc() - 소수점 제거

Math.trunc()는 소수점 이하를 무조건 잘라서 정수 부분만 반환해.

console.log(Math.trunc(5.9)); // 5
console.log(Math.trunc(5.1)); // 5
console.log(Math.trunc(-5.9)); // -5 (음수일 때는 -6이 아니라 -5)

👉 소수점 이하를 단순히 제거하는 느낌!
👉 Math.floor()와 Math.trunc()의 차이:

  • Math.floor(-5.9) → -6 (더 작은 정수로 내림)
  • Math.trunc(-5.9) → -5 (소수점만 제거)

🔹 5. 소수점 자리수 반올림 (toFixed() & toPrecision())

소수점 자리수를 정하고 싶다면 toFixed()나 toPrecision()을 사용

✅ toFixed(n) - 소수점 n자리까지 반올림

console.log(5.5678.toFixed(2)); // "5.57"
console.log(5.5.toFixed(3)); // "5.500"
console.log(5.5555.toFixed(1)); // "5.6"

👉 결과가 문자열(string)로 반환됨!
👉 toFixed(2) → 소수점 2번째 자리까지 반올림

 

✅ toPrecision(n) - n자리까지 반올림

console.log(5.5678.toPrecision(3)); // "5.57"
console.log(5.5.toPrecision(3)); // "5.50"
console.log(123.456.toPrecision(4)); // "123.5"

👉 전체 숫자의 유효 자릿수를 정할 때 사용
👉 toPrecision(3) → 전체 3자리까지 표시


🔹 실전 예제: 반올림된 소수점 계산

const price = 1234.5678;

console.log(`반올림: ${Math.round(price)}`); // 1235
console.log(`올림: ${Math.ceil(price)}`); // 1235
console.log(`버림: ${Math.floor(price)}`); // 1234
console.log(`소수점 2자리 반올림: ${price.toFixed(2)}`); // "1234.57"

 

🔹 정리

메서드 설명 예제 (5.7) 결과
Math.round() 반올림 (0.5 이상 올림) Math.round(5.7) 6
Math.ceil() 올림 (무조건 올림) Math.ceil(5.7) 6
Math.floor() 버림 (무조건 버림) Math.floor(5.7) 5
Math.trunc() 소수점 제거 (정수 부분만) Math.trunc(5.7) 5
toFixed(n) 소수점 n자리까지 반올림 5.567.toFixed(2) "5.57"
toPrecision(n) 전체 n자리까지 반올림 5.567.toPrecision(3) "5.57"

 

 


🔹 parseInt()란?

parseInt()는 문자열을 정수(integer)로 변환하는 자바스크립트 내장 함수

  • 숫자가 아닌 문자가 포함되어 있어도, 맨 앞에서부터 가능한 숫자만 추출해서 변환해.
  • 변환할 때 진법(radix, 기수)를 지정할 수도 있어. (기본값: 10진법)

1️⃣ 기본적인 parseInt() 사용법

console.log(parseInt("123"));   // 123 (문자 → 숫자)
console.log(parseInt("42px")); // 42 (앞 숫자만 변환)
console.log(parseInt("3.14")); // 3 (소수점 이하 버림)
console.log(parseInt("007"));  // 7 (앞의 0은 무시)
console.log(parseInt("hello")); // NaN (숫자가 없으면 변환 불가)

👉 숫자로 시작하는 문자열이면 변환이 가능하지만, 숫자가 없으면 NaN이 나와!


2️⃣ parseInt()와 Number()의 차이

 

  • Number()는 전체 문자열이 숫자로 변환 가능해야 함
  • parseInt()는 앞에서부터 숫자 부분만 추출 가능

 

console.log(Number("123"));   // 123
console.log(Number("42px"));  // NaN (문자 포함 → 변환 불가)
console.log(parseInt("42px"));// 42 (앞 숫자만 변환)
console.log(Number("3.14"));  // 3.14 (소수점 유지)
console.log(parseInt("3.14"));// 3 (소수점 버림)

👉 parseInt()는 "42px" 같은 경우에도 숫자 부분 42만 가져오지만, Number()는 숫자로 완전히 변환할 수 없으면 NaN을 반환해.


3️⃣ parseInt()에서 진법(radix) 사용

 

  • parseInt()는 2진수, 8진수, 16진수 등 다양한 진법을 지원해.
  • 두 번째 인자로 기수를 명시하면 해당 진법으로 변환할 수 있어!

 

console.log(parseInt("1010", 2));  // 10  (2진수 → 10진수)
console.log(parseInt("FF", 16));   // 255 (16진수 → 10진수)
console.log(parseInt("77", 8));    // 63  (8진수 → 10진수)
console.log(parseInt("100", 10));  // 100 (10진수 그대로 변환)

👉 parseInt("1010", 2) → 2진수 1010을 10진수 10으로 변환!
👉 parseInt("FF", 16) → 16진수 FF는 10진수 255!

📌 진법을 명확하게 지정하는 것이 좋음!

parseInt("08");  // 8 (기본적으로 10진법으로 처리)
parseInt("08", 8); // NaN (8진법에서는 '8'이 존재하지 않음!)

4️⃣ parseInt()가 숫자를 어떻게 읽는지

parseInt()는 문자열의 앞부분에서 숫자만 추출하고, 숫자가 아닌 문자를 만나면 거기서 멈춰!

console.log(parseInt("123abc")); // 123 (앞 숫자만 변환)
console.log(parseInt("007"));    // 7 (앞의 0 무시)
console.log(parseInt("   42"));  // 42 (공백 무시)
console.log(parseInt("10.99"));  // 10 (소수점 버림)
console.log(parseInt("abc123")); // NaN (맨 앞이 숫자가 아님)

👉 parseInt("123abc") → "123"까지만 숫자로 인식
👉 parseInt("abc123") → 맨 앞이 숫자가 아니라 변환 불가 → NaN


5️⃣ parseInt() 주의할 점

소수점이 있는 숫자 변환 시 주의!

console.log(parseInt("3.99")); // 3 (소수점 이하 버림)
console.log(parseInt("3.14")); // 3 (소수점 무조건 버림)
console.log(parseInt("0.99")); // 0 (정수 부분이 없으면 0)

👉 parseInt()는 소수점을 무시하고 정수 부분만 반환해!

 

NaN이 반환될 수도 있음

console.log(parseInt("hello")); // NaN (숫자가 없음)
console.log(parseInt(" "));     // NaN (공백만 있으면 NaN)

👉 변환할 수 없는 경우 NaN이 나오니까 주의해야 해!


6️⃣ parseFloat()과의 차이

함수 변환 방식 예제 ("3.14px") 결과
parseInt() 정수로 변환 (소수점 이하 버림) parseInt("3.14px") 3
parseFloat() 실수까지 변환 (소수점 유지) parseFloat("3.14px") 3.14
console.log(parseInt("3.14px"));   // 3 (정수로 변환)
console.log(parseFloat("3.14px")); // 3.14 (소수점 유지)

👉 소수점이 필요한 경우 parseFloat()을 사용하면 좋아!


7️⃣ parseInt()를 활용한 실전 예제

문자 포함된 숫자에서 숫자 추출하기

const price = "₩1000원";
console.log(parseInt(price)); // 1000

 

사용자 입력값(문자열)을 숫자로 변환

const userInput = "42px";
const number = parseInt(userInput);
console.log(number); // 42

 

랜덤한 16진수 색상을 숫자로 변환

const hexColor = "#ff5733";
const red = parseInt(hexColor.slice(1, 3), 16);
console.log(red); // 255

🔹 정리

✅ parseInt()는 문자열을 정수로 변환
앞에서부터 숫자만 변환하고, 숫자가 아닌 문자를 만나면 멈춤
진법(2, 8, 16 등)을 지정할 수 있음 (parseInt("FF", 16) → 255)
소수점 이하는 무조건 버림 (parseInt("3.99") → 3)
소수점까지 유지하려면 parseFloat() 사용

 

 

 

*위 포스팅은 챗GPT 답변을 정리하였습니다.