180527.md
June 10, 2018 · View on GitHub
수학1-1(나머지, 최대공약수, 최소공배수, GCD의 합, 진법)
관련 문제들
- https://www.acmicpc.net/problem/10430
- https://www.acmicpc.net/problem/2609
- https://www.acmicpc.net/problem/1934
- https://www.acmicpc.net/problem/1850
- https://www.acmicpc.net/problem/9613
- https://www.acmicpc.net/problem/11005
- https://www.acmicpc.net/problem/2745
- https://www.acmicpc.net/problem/1373
- https://www.acmicpc.net/problem/1212
[issue]에 대한 정리
[#issue1] 최대공약수(GCD)를 구하는 방법 '유클리드 호제법(Euclidean altorithm)'의 개념
* r = num1을 num2로 나눈 나머지 = num1 % num2
* GCD(num1, num2) = GCD(num2, r)
* 위와 같은 과정을 r = 0이 될 때까지 반복하면 그 때의 num2가 최대공약수가 된다.
// 재귀함수를 이용한 유클리드 호제법(Euclidean altorithm)
public int gcd(int num1, int num2){
if (num2 == 0) {
return num1;
} else {
return gcd(num2, num1 % num2);
}
}
[#issue1-1] 최대공약수를 이용하여 최소공배수(LCM)를 구하는 방법
* lcm = gcd * (num1/gcd) * (num2/gcd)
* 간단히, lcm = num1 * num2 / gcd
[#issue2] 기본적인 아스키코드
* 'null': 0
* 'space': 32
* '0': 48
* '9': 57
* 'A': 65
* 'a': 97
* 'delete': 127
[#issue3] 10진수 <-> 2진수, 8진수, 16진수 변환 시 Integer API 사용
- 10진수 -> B진수 (Integer.toString)
Scanner scanner = new Scanner(System.in);
int num = scanner.nextInt();
int proposition = scanner.nextInt(); // 바꾸려는 진법
// [방법1] 10진수 -> B진수의 변환
String result = Integer.toString(num, proposition);
System.out.println(result.toUpperCase());
// [방법2] 2, 8, 16진수로의 변환
String res2 = Integer.toBinaryString(num); // 10진수 -> 2진수
String res8= Integer.toOctalString(num); // 10진수 -> 8진수
String res16 = Integer.toHexString(num); // 10진수 -> 16진수
- B진수 -> 10진수 (Integer.parseInt)
Scanner scanner = new Scanner(System.in);
String num = scanner.next();
int proposition = scanner.nextInt(); // 해당 숫자의 진수
// B진수 -> 10진수의 변환
int result = Integer.parseInt(num, proposition); // B진수 -> 10진수
System.out.println(result)