2022/01/10 월요일

Gong Intaek·2022년 1월 10일
0

일상

목록 보기
213/1022
post-thumbnail

오늘 한 일

  • leetcode
    • Describe the Painting. (medium) - 풀이 실패
  • 실내 운동

문제 풀이

Describe the Painting. (medium) - 풀이 실패

그림에서 보이는 막대의 시점과 종점 그리고 값을 입력 값으로 하는 막대의 배열을 입력받고 막대들이 가지는 영역중 중복되는것은 영역의 값을 더하여 새로운 영역으로 구분하여 돌려주는 문제로 알고 풀이를 진행하였으나, 일부 예문에서 예상하지 않은 방식의 결과가 나타나 문제를 잘못 이해 하고 있다는 것을 확인함. 일부 조건에서만 동작하는 코드이므로 문제의 이해를 진행한뒤 개선을 진행해야 겠다.

문제에 대한 이해 부족보다는 풀이를 진행함에 필요한 조건중 일부분을 고려하지 못하여 예문을 풀이하지 못한 것으로 확인되었다. 이에 난잡한 이프문으로 구분되는 코드를 좀더 깔끔하게 정리 하려 풀이하고자 하였으나, 좀더 시간이 필요할듯 싶다. 아니면 필요한 조건들을 하나하나 추가 해가면서 풀이를 진행하던가. 어느 방향이든 좀더 생각해 보아야 할듯 싶다.

이전 작업에서 이프문으로 덕지덕지 도배하여 결과를 얻었던 부분을 나름 깔끔하게 정리하여 코드를 작성할수 있었다. 두 영역이 겹치는 위치 와 크기에 따라 달라지는 결과물을 좌측, 중앙, 우측 으로 3등분하여 구분하였다. 두 영역의 시점이 일치한다면 좌측부분은 필요가 없기에 작성하지 않다. 일치하지 않는다면 그 위치에 따라 결과를 결과 물에 추가한다.그리고 좌측 영역의 종점을 다음 작업인 중앙 영역의 시점으로 사용한다.

중앙영역의 구분에서는 사용되는 두 영역의 종점의 위치가 사용된다. 종점의 위치가 같다면 중앙 영역만 돌려주게 된다. 새로 입력 되는 영역의 종점이 현재 사용되는 결과물의 종점보다 길 경우, 중앙영역을 돌려주고 남는 입력 영역을 다음 결과물에서 다시 사용한다. 반대로 짧을 경우 중앙영역과 우측 영역을 구성하여 결과로 돌려주게 된다.

위 과정에서 사용되는 결과 배열을 전부 적용하고 나서 남은 입력 배열이 존재한다면 해당배열을 결과 배열에 추가하고 다음 입력 배열을 입력 받아 위과정을 반복 수행한다. 이런 방식을 통해 문제가 있었던 다른 부분에서는 제대로 된 결과를 얻게 되었으나, 결과 배열을 처음부터 끝까지 계속 반복 수행하기때문에 연산 횟수가 너무 커지고 느려지는 결과를 초래하게 되었다. 결과 주어지는 예문중 긴입력 값을 가지는 예문에서 시간 초과가 발생하였다.

문제를 해결하기 위해서는 연산을 수행하기위해 모든 결과 배열에대해 입력 배열을 하나하나 비교 연산을 수행했던 것에서 입력배열의 시점과 종점을 바탕으로 결과배열중 겹치는 배열에 대해서만 위과정을 수행하고 통합하여 결과로 돌려주는 과정이 필요하다 여겨진다. 하지만 단순히 일치 배열을 하나하나 검색하는 과정일 경우라면 현재 과정과 큰차이가 나지 않을리라 생각 된다. 그렇기에 해당 과정에서도 적절한 효율성을 가질수 있는 방법에대해 고민해 보아야 겠다.

이전 작업에서 언급한것 처럼 수행 시간을 줄이기 위해 결과물을 처음 부터 찾는 것이 아니라 입력 받는 영역의 범위가 적용 되는 부분 에서부터 시작하여 영역의 범위가 벗어나면 종료 하는 방식으로 풀이 방법을 수정 하였다. 해당 지점을 찾는 방법에는 이진 탐색을 적용 하였고 얻어지 결과는 이전 결과에서 수정된 영역을 대체 하여 적용 하는 방식을 적용 하였다.

이전 코드로 수행했던 결과와 비교해보면 상당히 수행시간이 줄어들긴 하였으나. 예문에서 요구하는 수준에는 못미치는 것으로 확인되었다. 매 계산마다 얻어진 결과의 순서가 정렬 되어있지 않기에 정렬 하는 과정이 영향을 주는것 같으나 해당 부분을 제외하고 별도로 돌려본결과 연산 시간은 큰차이가 나지 않는 것 같았다. 우선 더 개선해야할 방향을 잡지 못하였으므로 이것으로 멈추고 내일은 다른 문제를 풀이해야겠다. 해당 문제는 시간을 두고 다시 풀이를 진행할 예정이다.


남은 것

클라이언트

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

서버

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

데이터베이스

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

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

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

공부 할 것(꾸준히)


오늘은...

회복중.

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

0개의 댓글