[프로그래머스][C++] 나이 출력
나이 출력
문제 링크
분석
우선 이 문제의 제한사항에 “나이는 태어난 연도에 1살이며 매년 1월 1일마다 1살씩 증가합니다.”가 있는 이유에 대해 알아보겠습니다.
나이를 세는 방법은 만나이, 연나이, 세는나이(한국식 나이)가 있습니다.
만나이의 경우 태어난 연도를 0살로 하며 매년 생일을 기준으로 1살씩 증가합니다.
연나이의 경우 태어난 연도를 0살로 하며 매년 1월 1일마다 1살씩 증가합니다.
세는나이의 경우 태어난 연도를 1살로 하며 매년 1월 1일마다 1살씩 증가합니다.
즉, 제한사항의 내용은 세는나이를 기준으로 출생연도를 계산하라는 뜻입니다.
나이를 세는 방법에 따라 출생 연도를 계산하는 방법입니다.
만나이에서 생일이 지나지 않았을 경우 기준 연도 - 나이 - 1
입니다.
만나이에서 생일이 지났을 경우 기준 연도 - 나이
입니다.
연나이의 경우 기준 연도 - 나이
로 생일 여부와 관계없이 계산합니다.
세는나이의 경우 기준 연도 - 나이 + 1
이 됩니다.
이렇게 출생 연도를 계산하는 방법이 다르므로 제한사항의 내용이 세는나이를 말하는 것임을 이해하고 문제를 풀어야 합니다.
위에서 설명한 세는나이의 계산법에서 +1
하는것이 이해가 잘 되지 않는다면, 기준 연도 - (나이 - 1)
라고 이해하면 좋습니다.
그 이유는 태어난 해부터 1살로 시작하기 때문에, 나이를 세는 다른 방법들보다 항상 나이가 1살이 더 많게 됩니다.
그로인해 결과값이 1만큼 더 작아지며, 이 값을 보정해주기 위해 기준 연도 - 나이 + 1
에서 1을 더해주는 것입니다.
즉, 세는 나이로 출생 연도를 계산하려면 나이를 1살 줄이거나 기준 연도를 1년 더하는 것입니다.
문서의 제한 조건에 따라 모든 변수에 int
자료형을 사용해도 오버플로우는 발생하지 않습니다.
풀이
int solution(int age) {
int answer = 2022 - (age - 1);
return answer;
}
2022는 기준년도이며, 식은 분석에서 알아본 방법을 사용했습니다.
기존 식을 그대로 사용하지 않은 이유는 age
의 값을 먼저 1 줄이는 것이 가독성에 좋다고 생각했습니다.
성능 요약
테스트 1 〉 통과 (0.01ms, 4.17MB)
테스트 2 〉 통과 (0.01ms, 4.02MB)
테스트 3 〉 통과 (0.01ms, 4.16MB)
테스트 4 〉 통과 (0.01ms, 4.2MB)
테스트 5 〉 통과 (0.01ms, 3.64MB)
테스트 6 〉 통과 (0.01ms, 4.14MB)
테스트 7 〉 통과 (0.01ms, 4.21MB)
테스트 8 〉 통과 (0.01ms, 4.21MB)
테스트 9 〉 통과 (0.01ms, 4.16MB)
테스트 10 〉 통과 (0.01ms, 4.21MB)
테스트 11 〉 통과 (0.01ms, 4.14MB)
테스트 12 〉 통과 (0.01ms, 4.14MB)
댓글남기기