반응형
https://www.acmicpc.net/problem/1212
https://www.acmicpc.net/problem/1373
8진수 0 ~ 7를 2진수로 변경하면 아래와 같다.
0 → 000
1 → 001
2 → 010
3 → 011
4 → 100
5 → 101
6 → 110
7 → 111
따라서 str8['8진수 문자열 0 ~ 7']이 000 ~ 111이 되도록 memo 해서 출력만 하면 된다.
단, 가장 처음에 나오는 8진수 0 ~ 3의 경우, 앞의 0은 출력하지 않기 때문에 예외 처리를 한다.
#include <stdio.h>
char str[1001000];
int main(void)
{
char str8['9' + 1][5] = { 0 };
str8['0'][0] = '0'; str8['0'][1] = '0'; str8['0'][2] = '0';
str8['1'][0] = '0'; str8['1'][1] = '0'; str8['1'][2] = '1';
str8['2'][0] = '0'; str8['2'][1] = '1'; str8['2'][2] = '0';
str8['3'][0] = '0'; str8['3'][1] = '1'; str8['3'][2] = '1';
str8['4'][0] = '1'; str8['4'][1] = '0'; str8['4'][2] = '0';
str8['5'][0] = '1'; str8['5'][1] = '0'; str8['5'][2] = '1';
str8['6'][0] = '1'; str8['6'][1] = '1'; str8['6'][2] = '0';
str8['7'][0] = '1'; str8['7'][1] = '1'; str8['7'][2] = '1';
scanf("%s", str);
if (str[0] == '0')
{
printf("0\n");
return 0;
}
/* 첫 변수 예외 처리 */
if (str[0] == '1') printf("%s", "1");
else if (str[0] == '2') printf("%s", "10");
else if (str[0] == '3') printf("%s", "11");
else printf("%s", str8[str[0]]);
for (int i = 1; str[i]; i++) printf("%s", str8[str[i]]);
putchar('\n');
return 0;
}
2진수를 8진수로 바꾸는 것은 string의 길이를 구한 후, 3개씩 parsing하면 된다.
BOJ 2745 : 진법 변환처럼 mul 변수를 이용하여 sum에 누적하면 된다.
#include <stdio.h>
char str[1001000];
int ans[1001000];
int main()
{
int i, k, len, cnt, sum, mul;
scanf("%s", str);
for (len = 0; str[len]; len++);
cnt = sum = 0;
for (i = len; i > 3; i -= 3)
{
sum = 0;
sum += (str[i - 1] - '0') + (str[i - 2] - '0') * 2 + (str[i - 3] - '0') * 4;
ans[cnt++] = sum;
}
sum = 0; mul = 1;
for (k = i - 1; k >= 0; k--) /* 남은 i 처리 */
{
sum += (str[k] - '0') * mul;
mul *= 2;
}
ans[cnt++] = sum;
for (i = cnt - 1; i >= 0; i--) printf("%d", ans[i]);
putchar('\n');
return 0;
}
반응형
'알고리즘 > BAEKJOON' 카테고리의 다른 글
BOJ 2531, 15961 : 회전 초밥 (0) | 2021.07.04 |
---|---|
BOJ 2096 : 내려가기 (0) | 2021.06.26 |
BOJ 1016 : 제곱 ㄴㄴ 수 (0) | 2021.06.18 |
BOJ 5465 : 곰돌이 (0) | 2021.06.12 |
BOJ 1717 : 집합의 표현 (0) | 2021.06.10 |
댓글