본문 바로가기

⏳ 알고리즘/JavaScript 알고리즘

기본 연산

기본 연산

  • parseInt() : 문자열을 정수로 변환
  • parseFloat() : 문자열을 실수로 변환
  • Math.round() : 반올림
  • Math.ceil() : 올림
  • Math.floor() : 내림

 

 


1. A + B

문제

공백을 기준으로 구분되게 정수 a와 b가 한줄로 입력된다. 이 두 정수 a와 b를 더해서 출력하라.

 

코드

  • 공백(스페이스)를 기준으로 문자열을 쪼개서 배열로 반환하고 싶다면 split(' ')을 사용해야 한다. 만약 '1 3'.split(' ')을 하면 ['1', '3']이 반환된다.
  • 문자열을 정수로 만들기 위해서는 parseInt 함수를 사용해야한다. parseInt('3')을 하면 3이 반환된다.
const numbers = readline().split(' ');
const a = parseInt(numbers[0]);
const b = parseInt(numbers[1]);

print(a + b);

 

2. 직사각형 넓이 구하기

문제

밑변과 높이가 공백을 기준으로 한줄에 출력된다. 직사각형의 넓이를 출력하라.

 

코드

const input = readline().split(' ');
const x = input[0];
const y = input[1];

print(x*y);

 

3. 사과 나누기

문제

사과 n개와 사람 m명이 있다. n개의 사과를 m명의 사람에게 공평하게 나눠줘야 한다. 공평하게 몇개의 사과를 나눌 수 있으며 몇개의 사과가 남는가?

입력 출력
첫번째 줄: 사과 수 정수 n
두번째 줄: 사람 수 정수 m (m < n)
첫번째 줄: 한 사람당 받은 사과 수
두번째 줄: 남은 사과의 수

 

내가 푼 코드

const n = readline()
const m = readline()

print(parseInt(n / m)) //몫
print(n % m) //나머지

 

정답 코드

javascript에서 나누기의 몫을 정수로 만드는 방법은 Math.floor를 사용해야 한다. Math.floor(3.14)는 3을 반환한다.

const n = parseInt(readline());
const m = parseInt(readline());

print(Math.floor(n / m)); //몫
print(n % m); //나머지

 

4. 섭시 온도를 화시로 바꾸기

문제

섭시 온도와 화시온도는 현실세계에서는 같은 온도를 나타내나 서로 값이 다르다. 섭시 온도를 C라고 하고 화시온도를 F로 하겠다. C와 F의 관계는 F = C * 9 / 5 + 32 이다.

입력 출력
실수의 C 섭시온도가 한줄에 입력된다. 섭시를 화시로 변환해서 소수 첫째 자리에서 반올림

 

내가 푼 코드

const c = readline();

print(Math.round(c*9/5+32));

 

정답 코드

  • 문자열을 실수로 변환하기 위해서는 parseFloat를 사용해야 한다.
  • 반올림을 하기 위해서는 Math.round를 사용해야 한다. Math.round(3.1)을 하면 3이 나오고 Math.round(3.6)을 하면 4가 나온다.
const c = parseFloat(readline());
const f = c * 9 / 5 + 32;

print(Math.round(f));

 

5. 초를 시간 형식에 맞추기

문제

초를 받아서 시,분,초로 출력하는 문제이다.
23423초는 6시 30분 24초로 나타낼 수 있다.

입력 출력
정수로 초를 입력받는다. h시 m분 s초 형식으로 출력하라.
h, m, s가 0이라면 0을 출력하면 된다.

 

코드

let s = readline();
const h = Math.floor(s / 3600);
s = s % 3600;
const m = Math.floor(s / 60);
s = s % 60;

print(`${h}시 ${m}분 ${s}초`);

 

6. 마지막 수

문제

입력 받은 정수의 1의 자리의 수를 출력하라.

 

내가 푼 코드

let num = readline();

let last_char = num.charAt(num.length-1);
print(last_char);

 

정답 코드

const num = parseInt(readline());
const last = num % 10;

print(last);

 

7. 소수부

문제

임의의 실수 하나를 입력한다. 실수부만 점을 제외하고 소수점 6째 자리까지 출력한다.

 

내가 푼 코드

const float = readline()%1;

const result = parseInt(float*Math.pow(10, 6));
print(result);

 

정답 코드

const float = parseFloat(readline());
const integer = Math.floor(float); //정수부
const decimal = float - integer; //실수부
const degit6 = Math.floor(decimal * 1000000); 

print(degit6)

 

8. 수의 평균 구하기

문제

한줄씩 두개의 실수가 입력된다. 두 수의 평균을 출력하라. (소수 3째자리에서 반올림)

 

코드

const a = parseFloat(readline());
const b = parseFloat(readline());

const avg = (a+b)/2;
print(Math.round(avg * 100) / 100);

 

9. 지폐의 수

문제

과일의 개당 가격이 아래와 같다.

  • 사과: 3000원
  • 포도: 2000원
  • 키위: 1000원

총 가격에 맞는 지폐의 수를 출력하는 것이 문제이다.

만약 사과 3개, 포도 5개, 키위 2개를 사면 총 가격이 9000 + 10000 + 1000 = 21000원이 된다.
10000원, 5000원, 1000원 지폐가 최소의 수로 각각 몇장이 필요한가?

입력 출력
첫번째 줄: 사과의 갯수
두번째 줄: 포도의 갯수
세번째 줄: 키위의 갯수
첫번째 줄: 10000원 지폐의 수
두번째 줄: 5000원 지폐의 수
세번째 줄: 1000원 지폐의 수

 

코드

const a = readline();
const g = readline();
const k = readline();

let totalCost = a*3000+g*2000+k*1000;

const money10000=Math.floor(totalCost/10000)
totalCost = totalCost%10000;
const money5000=Math.floor(totalCost/5000)
totalCost = totalCost%5000;
const money1000=Math.floor(totalCost/1000)

print(money10000);
print(money5000);
print(money1000);