5988번: 홀수일까 짝수일까
짝이 없는 경재는 매일 홀로 있다보니 홀수를 판별할 수 있는 능력이 생겼다. 창식이는 경재의 말이 사실인지 그 능력을 시험해보려 한다. 창식이의 의심이 끝이 없을 것 같아 N개만 확인하기
www.acmicpc.net
문제
짝이 없는 경재는 매일 홀로 있다보니 홀수를 판별할 수 있는 능력이 생겼다. 창식이는 경재의 말이 사실인지 그 능력을 시험해보려 한다. 창식이의 의심이 끝이 없을 것 같아 N개만 확인하기로 정했다.
N개의 정수가 주어지면 홀수인지 짝수인지를 출력하는 프로그램을 만들어 경재의 능력을 검증할 수 있게 도와주자.
입력
첫 번째 줄에 숫자의 개수 N(1 <= N <= 100)이 주어진다.
두 번째 줄부터 N+1번째 줄에 걸쳐 홀수인지 짝수인지 확인할 정수 K (1 <= K <= 10^60)가 주어진다.
출력
N개의 줄에 걸쳐 한 줄씩 정수 K가 홀수라면 'odd'를, 짝수라면 'even'을 출력한다.
쉬운 문제 같은데 왜 브론즈 3이지?? 하면서 풀었다가 바로 틀려버린 문제입니다ㅋㅋㅠㅠ
확인할 정수 범위가 10^60이어서 c언어에서 쓸 수 있는 정수 자료형을 아득히 넘어버리기 때문에,
문자열을 만들어 풀어야 하는 문제입니다!
// 정수형 범위가 10^60을 넘어가기 떄문에 틀림
#include<stdio.h>
int main(void)
{
int n;
scanf("%d", &n);
int num;
while(n--){
scanf("%d", &num);
if(num%2==0){
printf("even\n");
}
else{
printf("odd\n");
}
}
return 0;
}
그래서 위에 코드 제출했다가 틀려 버렸고~
//문자열 이용하여 풀이
#include<stdio.h>
#include<string.h>
int main(void)
{
int n;
scanf("%d", &n);
char arr[60] = {0,};
while(n--){
int len = 0;
scanf("%s", arr);
len = strlen(arr);
if ((arr[len-1] - '0')&1){
printf("even\n");
}
else{
printf("odd\n");
}
}
return 0;
}
문자열 마지막 자리로 홀짝 구분해서 풀었더니 맞았습니다!
홀짝 판별은 나눗셈 연산이 시간이 오래 걸려서 비트 연산으로 풀어봤습니다
나눗셈으로 풀어도 시간 초과가 나지는 않지만 둘 다 알아두는 것이 좋겠죠~
최적화의 길은 멀고도 험하네요ㅋㅋ