문제를 좀 이상하게 이해해서 시간이 좀 걸렸다.
처음에 나는 입력을 어떻게 받는 것이 좋을지 고민하다가 fgets로 문자열 형식 입력을 받은 다음, atoi 함수를 써서 각 자릿수를 더하면 간단하게 구현할 수 있겠다고 생각했다.
<나의 오답>
위와 같이 인수가 호환이 안된다는 에러가 뜨는거다. 그래서 어떻게 호환시키지 하다가 그냥 저 밑줄 쳐진 부분 앞에다가 &를 넣어보았더니 밑줄이 사라졌다. 그래서 이어서 코드를 짜봤다.
근데 출력을 해보니 뭐가 문젠지를 깨달았다.
&arr[i] 이렇게 넣으니까 그 시작 주소를 받아온 다음, 뒤에까지 모두 읽고 통째로 형변환을 시킨 것이다.
123402에서 먼저 1, 그다음 2 이렇게 되길 바랬는데 (1+2...)
123402, 23402, 3402 이런 식으로 형변환이 이어져버리게 된 것이다. (123402+23402+...)
그리고 또 하나의 문제. 이거는 문제를 풀고 나서야 깨달은 건데 arr 크기를 99999999로 줄 필요가 없었다.
99999999까지 정수에 들어갈 수 있는 것이기 때문에 크기를 9 주면 되는 거였다. (8자리+한국인의 정으로 1 추가)
손나 바카!
<정답>
#include <stdio.h>
#define _CRT_SECURE_NO_WARNINGS
int main() {
int sumL = 0, sumR = 0;
int a;
int size_a = 0; // a의 자릿수
int sa10 = 1; // a의 자릿수만큼 10 곱한거
scanf("%d", &a);
int aa = a;
while (aa != 0) {
aa /= 10;
size_a++;
sa10 *= 10;
}
sa10 /= 10; /* 자릿수만큼 10을 곱했기 때문에 한 번 나눠줘야 함.
ex) 10이면 2자리 수니까 10을 두번 곱해서 100이 됨. 한번 나눠준다.
sa10에 0.1을 애초에 넣으면 되긴 하지만 정수형으로 선언하기 위해서..*/
int mid = size_a / 2;
for (int i = 0; i < mid; i++) {
sumL += a / sa10;
a %= sa10;
sa10 /= 10;
}
for (int i = 0; i < mid; i++) {
sumR += a / sa10;
a %= sa10;
sa10 /= 10;
}
if (sumL == sumR)
printf("LUCKY");
else
printf("READY");
return 0;
}
이렇게 다시 짰다. 형변환 작업 없애고 걍 정수 입력 받아서 10을 나누고 곱하고.. 하는 작업을 통해 왼쪽과 오른쪽의 합을 구함.
괜히 너무 어렵게 생각해서 시간 좀 썼다~
'TIL > 백준' 카테고리의 다른 글
백준_4375 : 1 - 모듈러 산술 (1) | 2024.09.06 |
---|---|
1292 : 쉽게 푸는 문제 - 이제 쉽네. 수열 더하기 (0) | 2024.08.28 |
16173 : 점프왕 쩰리 - 재귀함수 (0) | 2024.08.27 |
1225 : 이상한 곱셈 - char->int로 형변환 하기 (0) | 2024.08.25 |
4470 : 줄번호 - 2차원 배열에 공백 문자열 입력하기 (C) (1) | 2024.08.19 |