2022/01/24 월요일

Gong Intaek·2022년 1월 24일
0

일상

목록 보기
227/1031
post-thumbnail

오늘 한 일

  • leetcode
    • Minimum Cost For Tickets. (medium)
  • 실내 운동

문제 풀이

Minimum Cost For Tickets. (medium)

문제를 보면 입력되는 값을 여행할 날짜들을 입력한 날짜 배열과 주어지는 종류별 티켓 가격이다. 이를 바탕으로 여행에 사용되는 최소비용을 돌려주어야 한다.

가장 먼저 생각한 풀이방식은 모든 경우의 수의 결과를 얻고 거기서 가장 최소의 값을 돌려주는 방식이다. 날짜별로 각 종류의 티켓 사용을 고려하고 그러한 과정을 재귀적인 방식으로 연이어가서 최종적으로 결과를 얻어 비교하면서 최소 값을 찾는 방식이다.

이 경우 문제에 제시된 예문이나 통과에 필요한 다른 예문에서 잘 동작하는것을 확인하였다. 하지만 모든 경우의 수를 따지기에 조금만 날짜 배열이 길어져도 소요시간이 길어져 문제가 발생하였다. 해서 위방식의 틀을 그대로 둔채 각 티켓에따른 다음배열을 찾기 수월하게 이진 탐색 을 고려해보았으나 크게 다른 결과를 나타내지 않았다.

해서 알고리즘의 전반적이 개선이 필요하다고 생각하였고 모든 경우의수가 아닌 당장 가능한 최선의 수를 찾는 방식으로 풀이 방식을 수정하려고 하였다. 하지만 현재 시점에서 1일권이 나은지 7일원이 나은지 30일권이 나은지 구분하는 기준이 문제가 되었다. 1일권의 경우 다른 두경우가 실패할경우 사용하는 방식이면 되겠으나 7일권과 30일권을 어떻게 구분할것인가 하는 부분에서 적절한 기준을 찾지 못하였다. 해서 이부분에 대한 고민을 더 해보고 풀이를 진행해야 하겠다.

다른 풀이 방법을 생각하는 와중 1년이라는 기간안에 티켓사용이기에 최대 365일 안에 이루어지는 계산이라는 것에 눈길이가 이것을 어떤식으로 활용해야할까 생각해보다가 별다른 아이디어를 생각하지 못함.

해서 문제에 대해 논의한 부분을 드렁가서 다른 유저의 의견을 확인해봄. 해결책이 있어서 보니 활용 방법을 생각하지 못했던 부분에 대해 이야기를 하고 있었다. 해당 문제는 앞서 말한것처럼 1년의 기간동안 정해진 날짜들에 사용하려는 티켓을 가장 저렴하게 활용하는 가격을 찾는 문제이다.

해서 주어진 날짜들을 바탕으로 정해진 크기의 값에 누적시켜가면 최소값을 구하는 방식으로 해당 문제를 풀이할수 있었다. 예시 1번을 기준으로 하면,

1일부터 20일까지 총 20일의 기간을 생각할 배열을 구성하고 배정된 각각에 날에 3개의 티켓사용 가격에 대해 비교 해보는 것이다. 1일권은 배정된 날마다 1일권을 가산하여 가격이 계산되고 7일권은 7일전의 가격에 가산하여(현재 날짜보다 7일전이 계산할수 있는경우, 없다면 티켓가격으로만), 30일권의 경우도 7일권과 비슷하게 계산하여 현재 날짜에 필요한 최소금액을 입력하며 전체 기간동안 필요한 최소 금액을 구해나가는 방식이었다.

참고한 유저의 경우 days 배열에 맞게 반복을 수행하고 해당 배열의 값의 차이를 추가적으로 반복문을 돌려서 최소값을 입력하는 과정을 수행하였다. 해당 방식을 참조하여 작성한 풀이의 경우 입력된 날짜들에서 최소 날짜와 최대날짜를 확인하여 주어진 기간 크기의 배열을 구성 기간을 하루하루 수행하면서 해당 날짜가 입력된 배열에 정의된 날일경우 위의 풀이를 수행 아닐경우 이전날에 기록된 최소값을 현재 날에 입력하는 방식으로 수행하게 하였다. (풀이방식은 크게 다르지는 않지만 개인적이로 이방식이 좀 더 깔끔해 보였다.)


남은 것

클라이언트

  • 현재 상태에서 로그인 창 부분을 재활용하여 로그인 된상태 창을 구현 로그인 결과를 표기하고 로그아웃 버튼구현.
  • 실패시에는 실패 문구를 표현하고 로그인창으로 돌아가는 버튼구현.
  • 로그인 성공, 실패에 따른 결과 부분의 표현을 적용할 것.

서버

  • 데이터베이스와의 연결고리 구성

데이터베이스

  • 유저 네임, 비번만을 컬럼으로 가지는 유저 테이블 구성

코딩 문제 풀이 잘못된 폴더 선택 문제

  • 커밋기록 유지한채로 폴더 옮기는 법 찾는 중

공부 할 것(꾸준히)


개인프로젝트

홈페이지 만들기

  • 클라이언트와 연결된 서버 서버와 서버서버를 통괄하는 메인서버로 구성할 예정
  • 서버스택은 node.js, express, typescript를 사용할 예정
  • 데이터 베이스는 mysql 를 바탕으로 typeorm을 사용할 예정
  • 배포는 aws를 사용 할 예정.(새로 생성한 계정을 이용)
  • 클라이언트 부분은 아직 생각중
  • 제작 기간은 딱히 정하진 않음 - 생각하고 정리되면 그에맞춰 행동할 예정

오늘은...

프로젝트를 진행할 레포지터리 생성하고 어떻게 만들지를 생각해 보는 시간을 가짐

profile
개발자가 되기위해 공부중

0개의 댓글