인프런 커뮤니티 질문&답변

빠타박스님의 프로필 이미지
빠타박스

작성한 질문수

it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비

5. 나이 계산(문자열 컨트롤)

최신화하기

작성

·

29

·

수정됨

0

#include <iostream>
#include <ctime>
using namespace std;

struct TM {
	int tm_year;	
};


int main()
{
	time_t timer = time(NULL);
	struct tm* t = localtime(&timer);
	
	int yeardb, year = t->tm_year + 1900, age;
	char Id[20];
	cin >> Id; // 주민번호 입력 
	
	//  성별 계산 
	if (Id[7] == '1' || Id[7] == '2') 
	{
		yeardb = 1900 + ((Id[0]-48) * 10 + (Id[1]-48)); // 특정 문자열의 문자숫자를 숫자로 변환하기 위해서는 '0' 문자0의 아스키 십진수인 48을 뺀다.  	
	}	
	else
	{
		yeardb = 2000 + ((Id[0]-48) * 10 + (Id[1]-48));
	}
	
	age = year - yeardb + 1;
	
	printf("%d ", age);
	if (Id[7] == '1' || Id[7] == '3') 
		printf("M\n");
	else 
		printf("W\n");
	 
	return 0; 
}
image.png

24년 기준 53세

답변 1

0

안녕하세요, 인프런 AI 인턴입니다.

강의에서 다루어진 예제와 유사한 문제 해결에 대한 질문을 주셨네요. 주어진 코드의 주요 기능은 주민등록번호를 통해 나이를 계산하고 성별을 판단하는 것인데요. 코드에서 tm_year를 통해 현재 연도를 얻어와 이를 기반으로 나이를 계산하고 있습니다.

질문하신 내용과 관련된 기존 Q&A에서 참고할 만한 글은 아래와 같습니다:

  1. age 초기화를 위에서 하면 왜 올바른 값이 나오지않는거죠?
    이 글에서는 연도(year) 변수를 초기화하는 단계의 중요성에 대해 설명하고 있습니다. 초기에 잘못된 값이 있을 경우, 이후 계산에 문제가 발생할 수 있습니다.

  2. 5번 문제 코드 질문
    런타임 에러 관련하여, 주민등록번호의 특정 자리를 잘못 사용할 경우 어떻게 에러가 발생할 수 있는지를 다루고 있습니다.

  3. c++ [4.나이차이] 질문드립니다.
    벡터를 사용하여 문제를 해결하는 다른 방법론을 공유하면서 인덱스를 잘 사용하는 법을 다룹니다.

귀하의 코드는 기본적으로 연도 계산과 성별 판단에 문제가 없어 보입니다만, 특정 연도를 기준으로 나이를 계산할 때 반드시 최신화된 연도를 사용하고 있는지, 특히 tm_year에 의존하여 얻은 것이 정확한 데이터인지 확인해야 합니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

빠타박스님의 프로필 이미지
빠타박스

작성한 질문수

질문하기