촉촉한초코칩
[백준] 11005(진법 변환 2) C언어 본문
문제
10진법 수 N이 주어진다. 이 수를 B진법으로 바꿔 출력하는 프로그램을 작성하시오.
10진법을 넘어가는 진법은 숫자로 표시할 수 없는 자리가 있다. 이런 경우에는 다음과 같이 알파벳 대문자를 사용한다.
A: 10, B: 11, ..., F: 15, ..., Y: 34, Z: 35
입력
첫째 줄에 N과 B가 주어진다. (2 ≤ B ≤ 36) N은 10억보다 작거나 같은 자연수이다.
출력
첫째 줄에 10진법 수 N을 B진법으로 출력한다.
이 계산을 반대로 하면 되지 않을까..? result += (j) * pow(n, tmp) → result = result − j * (n^tmp)
그런데 생각해보면 우리는 j를 미리 알고있는게 아니기 때문에 이 방법을 쓸 수 없음
→ result와 n을 나눈 나머지가 정답임
#include <stdio.h>
#include <string.h>
#include <math.h>
int main() {
char s[50] = "";
int n;
long long result = 0;
int tmp = 0;
int j = 0;
scanf("%lld %d", &result, &n);
char ans[] = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};
while(result>0) {
tmp = result % n;
result = result / n;
for(int i=0; i<strlen(ans); i++) {
if (tmp == i) {
s[j] = ans[i];
j+=1;
}
}
}
printf("%s\n", s);
}
또 똑같은 문제 발생.. 거꾸로 출력됨
#include <stdio.h>
#include <string.h>
#include <math.h>
int main() {
char s[50] = "";
int n;
long long result = 0;
int tmp = 0;
int j = 0;
scanf("%lld %d", &result, &n);
char ans[] = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};
while(result>0) {
tmp = result % n;
result = result / n;
for(int i=0; i<strlen(ans); i++) {
if (tmp == i) {
s[j] = ans[i];
j+=1;
}
}
}
j = strlen(s);
for(int i=j; i>=0; i--) {
printf("%c", s[i]);
}
}
틀렸다고 함.. 반례를 더 찾아봄
https://www.acmicpc.net/board/view/145878 여기에 나온 반례는 전부 다 정답이라고 나오는데..
해결
- 마지막에 s를 출력할 때 i 설정을 j라고 해서 틀림 → j-1로 수정 (s배열의 마지막 (아무것도 없는 값?)을 출력하려고 해서 틀린 건가?)
#include <stdio.h>
#include <string.h>
#include <math.h>
int main() {
char s[100] = "";
int n;
long long result = 0;
int tmp = 0;
int j = 0;
scanf("%lld %d", &result, &n);
char ans[] = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};
while(result>0) {
tmp = result % n;
result = result / n;
for(int i=0; i<strlen(ans); i++) {
if (tmp == i) {
s[j] = ans[i];
j+=1;
}
}
}
j = strlen(s);
for(int i=j-1; i>=0; i--) {
printf("%c", s[i]);
}
}
'Algorithm' 카테고리의 다른 글
[백준] 27323(직사각) Python, C언어 (0) | 2024.09.14 |
---|---|
[백준] 2292(벌집) Python (0) | 2024.09.14 |
[백준] 2745(진법 변환) C언어 (0) | 2024.09.07 |
** [백준] 1431(시리얼 번) python (0) | 2024.08.04 |
[백준] 2903(중앙 이동 알고리즘) C언어, python (0) | 2024.07.07 |