일상 코딩
[C++] 문자열 제어, 주민등록번호를 통한 나이 및 성별 출력 본문
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 형식의 숫자가 될 수 있다.
아스키코드표를 보면 모양열이 문자열이고,
십진법열이 지정된 숫자이다.
'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
'C++ > 코딩테스트 대비' 카테고리의 다른 글
[C++ / 아마존 기출] 문자열 제어 및 탐색, 숫자만 출력 (0) | 2021.10.13 |
---|---|
[C++] 나이 차이, min, max 실시간 갱신 (0) | 2021.10.08 |
[C++] 진약수의 합 ex) 20의 진약수의 합 "1 + 2 + 4 + 5 + 10 = 22" 출력 (0) | 2021.10.08 |
[C++] 자연수의 합 ex) "3 + 4 + 5 + 6 + 7 = 25" 형태로 출력 (0) | 2021.10.07 |
[C++] 1부터 N까지 M의 배수합 (0) | 2021.10.07 |