Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
Tags
- bottomscaffold
- compose
- 선언형ui
- State
- remembercoroutinescope
- 양과 늑대
- derivedstateof
- ModalBottomSheet
- viewbinding
- mutableStateOf
- rememberupdatedstate
- 명령형 ui
- 선언형 ui
- 자바
- 2989번
- 2022 KAKAO BLIND RECRUITMENT
- BottomSheet
- 2022 kakao blind
- mutablestate
- producestate
- genarics
- 클린아키텍처
- 뷰바인딩
- 안드로이드
- apollo3
- snapshotflow
- clean coder
- 명령형ui
- Java
- JCF
Archives
- Today
- Total
버미
백준 1212번 - 8진수 2진수 본문
문제
8진수가 주어졌을 때, 2진수로 변환하는 프로그램을 작성하시오.
입력
첫째 줄에 8진수가 주어진다. 주어지는 수의 길이는 333,334을 넘지 않는다.
출력
첫째 줄에 주어진 수를 2진수로 변환하여 출력한다. 수가 0인 경우를 제외하고는 반드시 1로 시작해야 한다.
예제 입력 1
314
예제 출력 1
11001100
시간 초과된 문제 풀이
#include <stdio.h>
int main(void)
{
long long num, dex_num = 0, binary_num = 0;
int cnt = 1;
scanf("%lld", &num);
// 8진수를 10진수로 변환
while (num != 0)
{
dex_num += (num % 10) * cnt;
num /= 10;
cnt *= 8;
}
cnt = 1;
// 10진수를 2진수로 변환
while (dex_num != 0)
{
binary_num += (dex_num % 2) * cnt;
dex_num /= 2;
cnt *= 10;
}
printf("%lld", binary_num);
return 0;
}
정상 문제 풀이
#include <stdio.h>
int main(void) {
char octal[333335];
scanf("%s", octal); // 8진수 입력
int i = 0;
// 첫 번째 자리가 0인 경우를 제외하고는 반드시 1로 시작해야 하므로
// 첫 번째 자리를 이진수로 변환하여 출력
switch (octal[0]) {
case '0':
printf("0");
break;
case '1':
printf("1");
break;
case '2':
printf("10");
break;
case '3':
printf("11");
break;
case '4':
printf("100");
break;
case '5':
printf("101");
break;
case '6':
printf("110");
break;
case '7':
printf("111");
break;
}
// 나머지 자리들을 이진수로 변환하여 출력
for (i = 1; octal[i] != '\0'; i++) {
switch (octal[i]) {
case '0':
printf("000");
break;
case '1':
printf("001");
break;
case '2':
printf("010");
break;
case '3':
printf("011");
break;
case '4':
printf("100");
break;
case '5':
printf("101");
break;
case '6':
printf("110");
break;
case '7':
printf("111");
break;
}
}
return 0;
}
시간 초과된 문제 풀이를 보면 8진수 최대 길이는 333,334자리인데, 이는 83333334-1 = 2^1000002-1이 된다.
long long int의 범위는 일반적으로 -2^63 (-9,223,372,036,854,775,808) ~ 2^63 - 1(9,223,372,036,854,775,807)이여서, long long 타입으로는 받을 수 없다.
- 1 ~ 7의 숫자를 2진수로 나타낸 경우의 수로 표현해 각 자리수당 끊어가며 출력하는 방식을 사용했다.
'코딩 트레이닝' 카테고리의 다른 글
백준 2225번 - 합분해(C언어) (0) | 2023.07.13 |
---|---|
백준 1676번 - 팩토리얼 0의 개수(C언어) (0) | 2023.07.12 |
프로그래머스 - 문자열 밀기(c++) (1) | 2023.07.11 |
백준 10828번 - 스택(c++) (0) | 2023.07.09 |
백준 2563번 - 색종이(c언어) (0) | 2023.07.07 |