16 Apr 2021
|
로그포스
2021-04-16 TIL
- 오늘 한 것
- 학원 대면수업(15:30~22:00) 프로젝트 기간
- 이벤트, 이벤트 상세 게시판 동적 구성 - 어제 로직을 갈아엎는 작업을 이어서 진행했다. 이벤트 게시판은 해당 탭의 데이터를 받아서 뿌려주고 해당 탭에서 더보기 버튼을 눌렀을때 어느 탭에서 눌렀는지를 알아야했다. 탭이 눌려있으면 active class가 추가되는데 더보기 버튼을 눌렀을때 active가 있는 탭을 찾아서 그 탭에 데이터를 6개씩 더 추가한다. 문제는 이벤트 상세 구현시 백엔드에서 이전글,다음글 포함 데이터 세 개를 받아야하는데 진행중, 종료된 이벤트의 첫번째, 마지막 데이터는 2개가 나와야한다. 백엔드에서 진행중, 종료된 이벤트를 오늘 날짜를 기준으로 구분해서 처음과 끝을 정해야하는데 나오는 데이터는 전체 데이터를 기준으로 뽑아서 문제가 발생했다. 백엔드 담당 팀원이 이 부분을 모르는것 같아서 다음 주에 만나서 직접 설명을 해야겠다.
- QnA, QnA 등록, QnA 상세 게시판 동적 구성 - QnA 게시판은 댓글기능도 있고 잠금여부에 따라 비밀번호도 붙는다. 이 부분을 같이 작업하는 백엔드 팀원이 잘 이해를 하지 못한것 같아서 진행이 좀 더뎠다. 어찌어찌 리스트는 뽑았다해도 댓글부분이 구현되지않아서 상세페이지는 안나온다… qna 등록도 form 태그로 submit하도록 로직을 짰는데 어찌된 일인지 잘못된 접근이라고 나온다. 오늘 학원을 안가서 이 부분을 form 태그로 쏘는지 JSON으로 쏘는지 상의를 해보고 결정해야 될 듯하다.
- 내일 할 것
- 학원 대면수업(15:30~22:00) 프로젝트 기간
- 어드민 페이지 구현
- 알고리즘 공부
감기기운이 좀 있어서 학원 하루 쉬고 집에서 작업했다.
학원만 안갔다뿐이지 집에서 공장 돌렸다.
오늘의 한 줄 총평 : 이것이 개발자의 삶인가
15 Apr 2021
|
알고리즘
알고리즘 기초 with 인프런 [영리한 프로그래밍을 위한 알고리즘 강좌]
-
알고리즘의 분석
- 알고리즘의
자원(resource)사용량
을 분석
- 자원이란 실행 시간, 메모리, 저장장치, 통신 등
-
시간복잡도(time complexity)
- 실행시간은 실행환경에 따라 달라짐 (하드웨어, 운영체제, 언어, 컴파일러 등)
- 실행시간을 측정하는 대신
연산의 실행 횟수
를 카운트
- 연산의 실행 횟수는
입력 데이터의 크기에 관한 함수
로 표현
- 데이터의 크기가 같더라도 실제 데이터에 따라서 달라짐
- 최악의 경우 시간복잡도 (worst-case analysis)
- 평균 시간복잡도 (average-case analysis)
-
점근적(Asymptotic) 분석
- 점금적 표기법을 사용 : 데이터의 개수 n 일 때 수행시간이 증가하는 growth rate로 시간복잡도를 표현
- Θ-표기, Ο-표기 등을 사용
- 유일한 분석법도 아니고 가장 좋은 분석법도 아니나, 간단하고 비의존적이라 광범위하게 사용됨
-
상수 시간복잡도
- 입력으로 n개의 데이터가 저장된 배열 data가 주어지고, 그 중 n/2번째 데이터를 반환한다
int sample( int data[], int n )
{
int k = n/2 ;
return data[k] ;
}
- n에 관계없이 상수 시간이 소요된다. 이 경우 알고리즘의 시간복잡도는 Ο(1)이다
-
선형 시간복잡도
- 입력으로 n개의 데이터가 저장된 배열 data가 주어지고, 그 합을 구하여 반환한다.
int sum(int data[], int n)
{
int sum = 0 ;
for (int i = 0; i < n; i++)
sum = sum + data[i];
return sum;
}
""" 이 알고리즘에서 가장 자주 실행되는 문장이며,
실행 횟수는 항상 n번이다.
가장 자주 실행되는 문장의 실행횟수가 n번이라면
모든 문장의 실행 횟수의 합은 n에 선형적으로 비례하며,
모든 연산들의 실행횟수의 합도 역시 n에 선형적으로 비례한다 """
- 선형 시간복잡도를 가진다고 말하고 Ο(n)이라고 표기한다
-
순차탐색
- 배열 data에 정수 target이 있는지 검색한다.
int search(int n, int data[], int target)
{
for (int i=0; i<n; i++) {
if (data[i] == target)
return i;
}
return -1;
}
""" 이 알고리즘에서 가장 자주 실행되는 문장이며,
실행 횟수는 최악의 경우 n번이다. """
-
Quadratic
bool is_distinct( int n, int x[] )
{
for (int i=0; i<n-1; i++)
for (int j=i+1; j<n; j++)
if (x[i]==x[j])
return false;
return true;
}
- 최악의 경우 배열에 저장된 모든 원소 쌍을 비교 하므로 비교 연산의 횟수는 n(n-1)/2이다.
- 최악의 경우 시간복잡도는 Ο(n2)으로 나타낸다.
참고 자료
영리한 프로그래밍을 위한 알고리즘 강좌 - 인프런
14 Apr 2021
|
로그포스
2021-04-14 TIL
- 오늘 한 것
- 학원 대면수업(15:30~22:00) 프로젝트 기간
- moment.js 달력 수정 - 어드민 회원리스트 검색에서 오늘, 1주일, 1개월 등등 기간 선택 버튼을 클릭하면 현재 날짜 기준 계산된 날짜가 input창에 표기되는 것을 구현했다. 날짜 계산을 어떻게 할까 생각을 하다가 moment.js를 활용하기로 했다. 이 라이브러리로 아주아주 간단하게 날짜 계산이 가능하다.
- 어드민 페이지 화면 구현 - 회원리스트의 버튼들을 예쁘게 꾸미고 배치했다. 초기화, 검색 버튼들에 기능도 추가했다. 초기화는 말 그대로 초기화인데 form 태그를 사용하지 않아서 reset 기능을 쓸 수 없어서 직접 구현했다. 검색 버튼에도 AJAX 요청 메소드를 연결했는데, 먼저 입력한 데이터들을 JSON으로 포장하여 서버에 전송하여 받은 응답의 결과를 리스트에 다시 뿌려준다.
- 뉴스 상세 페이지 동적 구성 - 뉴스 게시판에서 게시글을 클릭하여 상세 페이지의 데이터를 서버에 요청한다. 이 부분에서 500 서비스 에러가 나서 에러를 찾는데만 엄청 시간을 쏟아부었다. 로직 자체에 문제가 없어보여서 다른 팀원에게 실행을 부탁했더니 이게 뭔일.. 나만 안되는것이 아닌가. 이것저것 엄청 찾아헤매이다가 이클립스를 껐다가 다시 켰더니.. 실행이 정상적으로 되었다. 이클립스의 캐시에 저장되었던 데이터가 문제였던것인지.. 깃허브에 누가 잘못 올렸던것인지.. 확실하진 않지만 아무튼 해결했으니 됐다.
- 내일 할 것
- 학원 대면수업(15:30~22:00) 프로젝트 기간
- 어드민 회원리스트 상세 페이지 구현
- 어드민 페이지 구현
- QnA or 이벤트 게시판 동적구성
- 알고리즘 공부
알고리즘 + 면접 인터뷰는 아무런 준비를 한 적이 없다. 내일부터 짬을 내서 짧게라도 공부를 시작해야겠다.
오늘의 한 줄 총평 : 알고리즘 +인터뷰 공부 시작하자