post-custom-banner

나만의 무기 만들기

어제에 이어 오늘도 Flutter를 공부해보았다.
오랜만에 새로운 언어를 익히다보니 다양한 시행착오를 겪는 중이다.

나의 경우는 아무래도 전체적인 흐름을 쓱 파악하고 나서, 이후에 타이핑(구현)과 노션 정리를 하는 것이 훨씬 직관적인 것 같다. 늦은 나이에 소프트웨어 복수전공을 시작하며 파이썬, C, Java를 한 번에 배워야만 했던 당시에도, 각 언어별로 유사점 및 차이점을 명확히 구분해야 하다보니 전반적인 흐름을 파악하는 방법이 효과적이었기 때문이다.

따라서, 현재 수강하는 Flutter 강의가 Part 1 과 Part 2 로 나뉘어져 있는데, 그 중 Part 1을 빠르게 쭉 살펴보는 시간을 가졌다. Flutter는 공부할수록 흥미로운데, 이렇게 앱개발이 간단(?)하게도 가능하구나 라는 생각이 든다. Part 1을 쭉 보고나니 이제야 머릿속에 그림이 그려지는 것 같아서, 내일은 오늘 훑어본 Part 1을 복습 및 정리하면서 더 깊게 이해하려고 한다. 이후에, Part 2도 같은 방식으로 공부해야겠다!

알고리즘 스터디

오늘도 알고리즘 스터디에서 백준 문제를 풀었다. 그리고, 오랜만에 실패!

백준 - 카카오머니

카카오머니 라는 문제였는데, 1시간 동안 도전했지만 12%에서 실패하고 말았다.
정답 비율이 11% 이긴 하지만... 자존심 상한다.
요즘 컨디션이 좋아서 거의 다 풀어냈는데 흑흑

보다시피, 문제 길이만 봐도 상당히 사악하다.
내가 해석한 문제의 조건은 다음과 같다.

''' 입출금 단위는 1원 '''

''' 입금 ''' 
# 자신의 통장에서 잔액을 충전 or 타인에게 송금 받을 경우, 잔액이 증가

''' 출금 '''
# 카카오머니로 결제 or 타인에게 송금을 할 경우, 잔액이 감소
# 잔액이 부족하면, 최소 충전단위 M원 * 다발 을 통장에서 가져오고, 이후 x원을 차감.

''' 입출금 로그 : 두 개의 정수 쌍 (a,b) => 시간 순서대로 저장 '''
# a > 0 : 입금. 그 결과, 잔액은 b원이 됨
# a < 0 : 출금. 그 결과, 잔액은 b원이 됨.
# a = 0 : 그런 경우는 없음.

다른건 문제없고 아무래도 잔액이 부족해서 충전이 발생하는 경우만 보면 되는 것 같았다. 그래서, 최초에 잔액이 부족해졌을 때 충전한 금액을 기준으로 약수를 저장하는 배열을 만들었다.이 때, 약수는 충전 후에 차감이 일어난 뒤에 주어진 잔액 b원보다는 큰 숫자만을 저장했다. 왜냐하면 잔액이 부족해서 충전해서 출금한 후에 잔액이 4,500원이 남았다면, 충전단위가 최소 4,500원보다는 컸을 것이기 때문이다.

주어진 테스트케이스의 경우, 잔액이 부족해 20,000원을 충전했고 4,500원의 잔액이 남았다. 따라서, 가능한 최소충전단위 M원은 5,000원 / 10,000원 / 20,000원 뿐일 것이다.

이러한 로직을 바탕으로 코드를 구성했는데, 자꾸 12%에서 '틀렸습니다' 가 나왔다. 하하!
9 * 10¹⁸이 문제인가 싶었으나, 처리를 해준 것 같은데 개선되지 않았다. 후후...

현재는 프로젝트 준비가 한창이라 원래 하던대로 알고리즘에만 매달릴 순 없어서, 아쉽게도 일단은 실패로 놔뒀다.
대신, 다른 사람의 풀이나 블로그는 참고하지 않고 일단 뒀다가 내 힘으로 다시 도전해보려고 한다 !
프로젝트 끝나기만 해봐라... 너부터 풀어주겠어.... 후보 1번.

post-custom-banner

0개의 댓글