250x250
Notice
Recent Posts
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
관리 메뉴

일상 코딩

[C++] 문자열 제어, 주민등록번호를 통한 나이 및 성별 출력 본문

C++/코딩테스트 대비

[C++] 문자열 제어, 주민등록번호를 통한 나이 및 성별 출력

polarcompass 2021. 10. 13. 04:58
728x90
#include<iostream>
using namespace std;
int main(){
    freopen("./05_age_calcul/input.txt","rt",stdin);
// 채점 프로그램 돌릴때 사용(mac 사용자 기준)
// int main(int argc, char* argv[]){
// 	freopen(argv[1], "rt", stdin);
// 	freopen(argv[2], "w", stdout);
    int age,year;
    char cnum[20],sex; // 주민등록번호 저장
    cin >> cnum;

    if(cnum[7] == '1' || cnum[7] == '2'){ year = 1900 + ((cnum[0]-48)*10+(cnum[1]-48));}
    else{ year = 2000 + ((cnum[0]-48)*10 + (cnum[1]-48));}
    age = 2019 - year + 1;
    
    if(cnum[7] == '1' || cnum[7] == '3'){sex = 'M';}
    else{ sex = 'W';}

    cout << age << " " << sex << endl;
}

입력 예제 1

780316-2376152

출력 예제 1

42 W

입력 예제 2

061102-3575393

출력예제 2

14 M
7 8 0 3 1 6 - 2 3 7 6 1 5 2
0 1 2 3 4 5 6 7 8 9 10 11 12 13

상단은 입력된 주민등록번호이고, 하단은 index이다.

성별 판단은 7번 index에서하고, 나이는 0, 1 번 index에서 하게 된다.

C++의 경우 파이썬처럼 int()로 감싼다고해서 '1'로된 문자가 숫자로 변환되진 않고, 

아스키코드표를 보고 '0'을 기준으로 지정된 숫자를 빼야 int 형식의 숫자가 될 수 있다.

아스키코드표를 보면 모양열이 문자열이고,

십진법열이 지정된 숫자이다.

 

https://ko.wikipedia.org/wiki/ASCII

'0' '1' '2' '3' '4' '5' '6' '7' '8' '9'
48 49 50 51 52 53 54 55 56 57

'0'을 기준으로 int 숫자로 바꾸고 싶으면 48을 빼는 방식으로 표현하면 된다.

(cnum[0]-48)*10 + (cnum[1]-48)

입력받은 문자열 cnum에서 0번째는 '7'이고, 1번째는 '8'이라 하였을때,

(55 - 48) * 10 + (56 - 48)을 하게되면, int 숫자 78을 얻게 된다.

728x90