⚠️ 코드 없이, 설명만 작성된 글입니다.
[N진법]?
10진법에 익숙한 우리에게 N진법은 다소 어색하게 느껴진다.
하지만, 우리는 이미 일상에서 다양하게 N진법을 접하고 있다.
예를 들어 생각해 보자.
연필은 한 다스는 12자루이다.
그럼 연필이 30개면? 2다스 6자루가 된다.
즉, 10진수로 30은, 12진수로 26이된다.
아직 애매한가?
그럼 계란의 경우도 생각해보자.
계란은 한판에 30개로 구성된다.
그럼 계란이 3판에 3개가 추가로 있다면 총 몇 개의 계란이 있는 것일까?
답은 93개이다.
즉, 30진수로 33은 10진수로 93이 되는 것이다.
우리는 이처럼, 이미 자연스럽게 다양한 진법을 실생활에 사용해 왔다.
단순하게 아래와 같이 생각하고, 변환법을 바로 알아보자.
N진법 = 모든 자리 수가 0~(N-1)의 수로 표기된 수의 표기법
[변환 방법]
변환 방법은 두가지로 설명하겠다.
- 10진법에서 N진법으로 변환하는 방법
- N진법에서 10진법으로 변환하는 방법
■ [10진법에서 N진법으로 변환하기]
10진법에서 N진법으로의 전환은, 변환하고자 하는 수를 N으로 반복해서 나누며, 계산 중 발생되는 나머지 값들과마지막에 남는 몫을 읽는 것이다.
말로 보면 이해 안간다. 바로 예시를 보자.
예시 1: 을 2진법으로 변환하기
- 45 / 2 = 22…1
- 22 / 2 = 11…0
- 11 / 2 = 5…1
- 5 / 2 = 2…1
- 2 / 2 = 1…0
위 과정에서 빨간 색으로 강조된 마지막 몫과 계산 중 나오는 나머지 값들을 아래서 위로 순차적으로 읽으면 된다.
⇒ 2진법으로 변환된 값:
추가로, 보통 CS에서 2진법을 표기할때는 숫자 0과 binary의 첫글자인 b를 붙여서 표기함으로써 2진법임을 나타낸다.
∴ 0b101101
예시 2: 을 16진법으로 변환하기
- 45 / 16 = 2…13
⇒ 16진법으로 변환된 값: 2D
추가로, 보통 CS에서 16진법을 표기할때는 숫자 0과 알파벳 x를 붙여서 표기함으로써 16진법임을 나타낸다.
∴ 0x2D
■ [N진법에서 10진법으로 변환하기]
우선 공식은 다음과 같다.
위 예제1,2 에서 변환해본 숫자를 다시 10진법으로 되돌리면서 적용해 보겠다.
예시 3: 0b101101을 10진법으로 변환하기
인덱스(i) | 5 | 4 | 3 | 2 | 1 | 0 |
2진법(0b) | 1 | 0 | 1 | 1 | 0 | 1 |
공식 | | | | | | |
값 | 32 | 0 | 8 | 4 | 0 | 1 |
값의 합: 32 + 0 + 8 + 4 + 0 + 1 = 45
예시 4: 0x2D를 16진법으로 변환하기
인덱스(i) | 1 | 0 |
2진법(0b) | 2 | D |
공식 | | |
값 | 32 | 13 |
값의 합: 32 + 13 = 45
[N진법 관련 백준 알고리즘 문제]
- 1373번 : www.acmicpc.net/problem/1373
- 1212번 : www.acmicpc.net/problem/1212
- 11005번 : www.acmicpc.net/problem/11005
- 2745번 : www.acmicpc.net/problem/2745
- 11576번 : www.acmicpc.net/problem/11576
Uploaded by N2T
'CS > Algorithm' 카테고리의 다른 글
에라토스테네스의 체 (2) | 2023.10.20 |
---|---|
유클리드 호제법(Euclidean algorithm) (2) | 2023.10.14 |
힙(Heap) (0) | 2023.03.01 |
스택(Stack) (0) | 2023.02.27 |
큐(Queue) (0) | 2023.02.27 |