[백준알고리즘] #8437. Julka (by JAVA and node.js)
백준알고리즘
- Bronze 5 -
#8347. Julka by JAVA and node.js
문제
출처: https://www.acmicpc.net/problem/8437
ㅋㅋㅋㅋㅋ이야.. 이젠 폴란드어..
구글 번역기의 도움을 받았다..
[문제]
Julka는 어제 유치원에서 다음 수수께기를 풀면서 가정교사를 놀라게 했습니다.
Klaudia와 Natalia는 함께 사과 10개를 가지고 있지만, Klaudia는 Natalia보다 2개 더 많은 사과를 가지고 있습니다. 각 소녀들은 몇 개의 사과를 가지고 있습니까?
Julka는 생각 없이 대답했습니다. Kludia는 6개의 사과를 가지고 있고 Natalia는 4개의 사과를 가지고 있습니다.
튜터는 Julka의 대답이 우발적이지 않은지 확인하기로 결정하고 과제의 사과 개수를 늘리며 수수께기를 반복했습니다. Julka는 항상 올바르게 대답했습니다. 놀란 선생님은 Julka의 '연구'를 계속하고 싶었지만 너무 많은 숫자로 인해 스스로 퍼즐을 빨리 풀 수 없었습니다. 유치원 교사를 돕는 해결책을 제안하는 프로그램을 작성하십시오.
다음과 같은 프로그램을 작성하십시오.
- 두 소녀가 함께 가지고 있는 사과의 수와 Klaudia가 가지고 있는 사과의 수를 읽습니다.
- Klaudia의 사과의 수와 Natalia의 사과 수를 계산합니다.
- 결과를 씁니다.
[입력]
입력은 두 줄로 되어있습니다.
첫 번째 줄은 소녀들이 소유한 모든 사과의 수를 포함하고, 두 번째 줄은 Klaudia가 얼마나 더 많은 사과를 가지고 있는지를 나타냅니다.
두 숫자 모두 정수와 양수입니다.
소녀들은 총 10^100개 이하의 사과를 가지고 있는 것으로 알려져있습니다.
보시다시피, 사과는 매우 작을 수 있습니다.
[출력]
두 개의 연속적인 라인에 두 개의 정수를 한 줄에 하나씩 써야 합니다.
첫 번째 줄에는 Klaudia의 사과 개수가 출력되어야 하고, 두 번째 줄에는 Natalia의 사과 개수가 출력되어야 합니다.
소녀들은 항상 사과를 통째로 가지고 있는 것으로 알려져있습니다.(반 개 이런건 없다는 말 같다)
접근 방법
전체 개수 = n
두 사람의 사과 개수 차이 = m
Klaudia 사과 개수 = x라고 하면 Natalia 사과 개수 = n-x = x-m >> 2x = n+m
Klaudia의 사과 개수 x = (n+m)/2 임을 이용하면 된다.
(Natalia의 경우 n - (n+m)/2 = n/2 - m/2 = (n-m)/2)
그리고 범위가 10^100 이므로 BigInteger를 사용
풀이
▶ JAVA
import java.math.*;
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
BigInteger n = scan.nextBigInteger();
BigInteger m = scan.nextBigInteger();
BigInteger two = new BigInteger("2");
scan.close();
System.out.println((n.add(m)).divide(two));
System.out.println((n.subtract(m)).divide(two));
}
}
▶ node.js
var fs = require('fs');
var input = fs.readFileSync('/dev/stdin').toString().trim().split('\n').map(BigInt);
var n = input[0];
var m = input[1];
console.log(((n+m) / 2n).toString());
console.log(((n-m) /2n).toString());
node.js의 경우 BigInt가 아직은 생소하다..
BigInt에서 단순 나누기를 할 때 2n으로 나눠줘야 하는 것이 포인트..
결과
End.
heisely's 괴발개발 개발일지