본문 바로가기
알고리즘/BAEKJOON

BOJ 1212, 1373 : 8진수 2진수, 2진수 8진수

by 피로물든딸기 2021. 6. 21.
반응형

알고리즘 문제 전체 링크

 

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

댓글