5번 문제   

 

 

    내가 풀이한 답   

 

 문제를 보니 입력 예제의 맨 앞자리 두 자리 수와 "-" 뒤의 자리 수가 제일 중요하다는 느낌을 받았다. 나이를 계산할 때에는  <stdlib.h> 라이브러리의 atoi 함수를 이용하여 문자열을 숫자열로 바꿔주는 작업을 하였고 년도가 2019년으로 고정되어 있기 때문에 1900년생들은 119, 2000년대생들은 19를 기준으로 맨 앞자리 두 자리수를 빼서 +1을 붙여주면 됐고 성별을 알기 위해서는 "-" 뒤의 숫자가 무엇에 해당하는지만 확인하면 됐고 문제에서 주어진대로 1, 2, 3, 4 총 4가지 경우의 수만 생각을 하고 코드를 짰다. 

 

#include <iostream>
#include <string>
#include <stdlib.h>
using namespace std;

int main(int argc, char** argv) {
	string s;
	cin >> s;
	
	int age = atoi(s.substr(0, 2).c_str());
	int gender = atoi(s.substr(7, 1).c_str());
	
	if(gender == 1) cout << 119 - age + 1 << " M" << endl;
	else if(gender == 2) cout << 119 - age + 1 << " W" << endl;
	else if(gender == 3) cout << 19 - age + 1 << " M" << endl;
	else cout << 19 - age + 1 << " W" << endl;
	
	return 0;
}

 

 그 결과 통과를 했다.

 


    사이트의 답안   

#include <stdio.h>
int main(){
	char a[20];
	int year, age;
	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;
}

 

 강의에서 <iostream> 보다는 <stdio.h>를 쓰는 것이 입출력면에서 훨씬 성능이 좋다고 하였다. 나도 이제부터는 <stdio.h>로 바꾸어서 코드를 짜는 습관을 들여야겠다. 그리고 C++을 너무 오랜만에 만져서 그런지 char 배열로 해결할 수 있는 것을 string으로만 해결하려고 했던 행동을 반성하게 되었다. 어쩐지 비교연산자를 쓸 때 힘들게 되더라니...  그리고 강의에서는 아스키 코드를 썼다. 0은 48이고 1씩 증가하여 9는 57이 된다. 나머지는 논리적으로 다를게 없었다. 

 

 

 

 

    정리   

#include <stdio.h>   // scanf 함수를 쓰기 위한 라이브러리(iostream) 대체
#include <stdlib.h>  // atoi 함수를 쓰기 위한 라이브러리
#include <string>    // substr 함수를 쓰기 위한 라이브러리

1. 문자열을 잘라서 숫자로 바꿔주기

    // substr 문자열을 잘라주는 함수
    // atoi 해당 문자열을 숫자로 바꿔주는 함수
	int age = atoi(s.substr(0, 2).c_str());
	int gender = atoi(s.substr(7, 1).c_str());
    
 
2. 다음부터는 string 대신에 cahr[]도 고려할 것
    char a[20];


3. cin, cout 객체 대신에 scanf("%s", &a), printf("%d ", age) 함수를 사용할 것

 

 

'알고리즘 & 자료구조 > 기초 다잡기' 카테고리의 다른 글

7. 영어단어 복구  (0) 2020.09.02
6. 숫자만 추출  (0) 2020.09.01
4. 나이 차이  (0) 2020.09.01
3. 진약수의 합  (0) 2020.09.01
2. A부터 B까지의 자연수의 합  (0) 2020.09.01