문제
주민등록증의 번호가 주어지면 주민등록증 주인의 나이와 성별을 판단하여 출력하는 프로그램 을 작성하세요. 주민등록증의 번호는 -를 기준으로 앞자리와 뒷자리로 구분된다. 뒷자리의 첫 번째 수가 1이면 1900년대생 남자이고, 2이면 1900년대생 여자, 3이면 2000년대 생 남자, 4이면 2000년대생 여자이다. 올해는 2019년입니다. 해당 주민등록증 주인의 나이와 성별을 출력하세요.
💡 입력설명
첫 줄에 주민등록증 번호가 입력됩니다.
💡 출력설명
첫 줄에 나이와 성별을 공백을 구분으로 출력하세요. 성별은 남자는 M(man), 여자는 W(Woman)로 출력한다.
💡 입력예제1
780316-2376152
💡 출력예제1
42 W
💡 입력예제2
061102-3575393
💡 출력예제2
14 M
코드
최종 풀이
#include <stdio.h>
int main() {
int year, age;
char sex;
char a[20];
scanf("%s", &a);
if(a[7] == '1' || a[7] == '2') {
year = 1900 + ((a[0] - 48) * 10) + (a[1] - 48);
} else {
year = 2000 + ((a[0] - 48) * 10) + (a[1] - 48);
}
age = 2019 - year + 1;
printf("%d ", age);
if(a[7] == '1' || a[7] == '3') {
printf("M\n");
} else {
printf("W\n");
}
return 0;
}
설명
주민등록번호를 받는 a배열을 선언한다.
주민등록번호 뒷자리 첫번째에 해당하는 a[7]이 '1' 또는 '3'일 경우 1900년대생에 주민등록번호의 앞 두자리에 해당하는 a[0] a[1]을 더하여 year변수에 할당한다.
하지만 a[0]은 문자열 형태이므로 정수형으로 변환하기 위해 -48을하고 십의자리이므로 * 10을 한다. 마찬가지로 a[1]도 정수형으로 변환한다. 이후 나이는 올해 2019에서 year + 1을한 값을 age에 할당한다
마지막으로 주민등록번호 뒷자리의 첫번째에 해당하는 a[7]이 '1' 또는 '3'이면 'M'을 출력하고 아닌 경우는 'W'을 출력하도록 한다.
배운 점
1. <stdio.h>가 <iostream>보다 더 많은 데이터 값을 입력하고 출력하는데 빠르게 동작하므로 scanf(), printf()을 잘 활용하는 것이 좋다.
2. 문자열을 정수형으로 바꾸기 위해선 -'0' 또는 -48을 해준다.
해당 내용은 김태원님의 'it 취업을 위한 알고리즘 문제풀이' 강의를 듣고 작성한 글입니다.