
오늘 오전에는 매일 진행하는 알고리즘 문제 풀이에 대해 이야기 할 것이다. 자바를 배우며 알고리즘을 푸는 재미가 생기기 시작했고, 오늘로 학습 4일차가 되었다. 첫날에는 배운 내용을 활용해 문제를 풀어보려 했지만, 막상 도전해보니 너무 어려워 결국 다른 사람들이 푼 해답을 참고하게 되었다. 다행히도 2일차와 3일차는 1일차와 유사한 문제라 비교적 쉽게 해결할 수 있었다.

(위 사진은 프로그래머스에서 문제를 가져왔다)
하지만 오늘 4일차 문제는 조금 달랐다. 문제를 보자마자 어떻게 접근해야 할지 막막했다. 우선 나이는 최대 120살까지라는 제한이 있었기에 if문을 사용해야겠다고 생각했지만, "나이는 태어난 연도에 1살이며 매년 1월 1일마다 1살씩 증가한다"는 두 번째 제한사항에서 막혀버렸다.
10분 정도 고민했지만 답이 떠오르지 않아 결국 나이 계산 방법을 인터넷에서 검색해 보았다. 그 결과, 엑셀에서 나이를 구하는 방식인 [해당 년도 - 현재 나이 + 1] 공식을 활용하면 출생 연도를 구할 수 있다는 것을 알게 되었다. 이 문제는 나이를 묻는 것이 아니라 출생 연도를 구하는 문제였기에 더 헷갈렸다.
그 후, 아래와 같은 코드로 답을 작성해 봤다.
Class Solution {
public int solution(int age) {
int currentYear = 2022;
int birthYear = currentYear - age + 1;
return birthYear;
}
}
2022년 기준으로 문제를 풀어야 했기에 현재 연도를 2022로 고정하여 currentYear 변수를 설정했고, 엑셀에서 본 공식을 이용해 birthYear를 계산하는 방식으로 작성했다. 2022년이 고정되어 있어 currentYear = 2022로 설정하는 부분이 꼭 필요하지는 않았지만, 배운 것을 적용해 보고 싶어 이렇게 적었다. 결과적으로 문제는 통과했지만, 나이 범위 조건인 0 < age <= 120을 포함해야 할 것 같아 if문을 추가했다.
class Solution {
public int solution(int age) {
int answer = 0;
int currentYear = 2022;
if (0 < age && age <= 120) {
answer = currentYear - age + 1;
}
return answer;
}
}
이렇게 문제를 해결하고 나니, 20분 넘게 고민했던 것이 무색할 만큼 간단한 문제였다는 생각이 들었다. 그러나 스스로 답을 찾고 정답을 확인하는 순간의 쾌감은 매우 짜릿했다. 이런 성취감 덕분에 계속해서 문제 풀이에 도전하게 되는 것 같다.