알고리즘

가언·2024년 7월 5일

✅ 동적 계획법(dynamic programming)

"(한 두번의 연산으로 안 풀리는)큰 문제를 (한번의 연산으로 풀릴 정도로) 작게 쪼개서 그 답을 기억하고, 큰 문제 풀때 활용해서 푼다."

=문제를 쪼개서, 작은 문제의 답들을 적어두면서 뒷 문제 풀기

F(1)=1, F(2)=2F(n-1)+F(n-2)=F(n)

✅ 그리디(Greedy)

사탕 최대 3개
사탕 최소 3개
유람선 최대 1000kg
유람선 최소 10kg
유람선 최대 100명
유람선 최소 1명

"최대" 라는 단어가 나오면 대부분 그리디로 해결 가능

프로그래머스 구명보트

https://school.programmers.co.kr/learn/courses/30/lessons/42885

  • 사장님 입장에서 꽉꽉채우는게 이득
  • 최대 2명: 2명
  • 최대 100kg: 100kg
  • 몸무게: [50,70,50,80]
  • 먼저 정렬을 하는게 좋음!
    1) 80, 70: 꽉 채울 확률은 높고, 내 마음도 편한데 =2명 확률 낮음
    2) 20, 50: 2명 확률 높, 덜 채운 느낌...음...
    그렇다면? 가장 많이 나가는 사람과 가장 적게 나가는 사람을 함께 내보내자!
    3) 20, 80: 채울 확률도 높고, 내 마음도 괜찮고 ㅋㅋ 2명이 탈 확률도 괜춘?!
    만약 20, 90: 가장 무거운 친구 타고 감 !, 20인 친구는 70과 짝지어서 나감

✅ 해시(hash)

해시를 왜 사용하는가? 우리 이미쓰고 있잖아 해시!!

무한스크롤? 페이지 이탈을 줄이기 위해, 머무는 시간을 늘리기 위해 사용함

해시코드? 검색 노출, 해시코드가 인스타에 없었다면 찾고 싶은 게시물을 찾기 매우 어려움, 활성사용자수가 넘쳐나지만, 내 글을 읽을 확률은 매우 낮음 ➡️ 빠르게 찾기 위함

리스트를 사용하는게 가장 빠른 해결법일 수도 있다. 리스트의 index가 key값이고, value가 value이기 때문 정렬 후 사용하는 걸 추천!

문제: 완주하지 못한 선수, 두 큐 합 같게 만들기

https://school.programmers.co.kr/learn/courses/30/lessons/42576
https://school.programmers.co.kr/learn/courses/30/lessons/118667
숫자를 문자로?
정렬은 필수?
배열, for, if 없이 못푸는 문제는 없다.

✅ 리액트의 단점

SEO? 검색 최적화가 좋지 않음.

첫페이지를 띄우는 속도에서 뒤쳐짐. 바닐라로 짜서 첫 페이지를 띄우는 속도를 올림.
디자인은 맘에 들지만, 속도가 느림-> 백단에서 처리해 줄 수 있을까? next.js

✅ 자료구조 딱 2개만 공부할 수 있다면?

리스트, 맵 !!

맵을 DB처럼 사용
서버? 내 노트북도 서버가 될 수 있음 반을 쪼개서 쌓으면 서버가 됨.
24대?* 2000만원=4억 8천만원..?
K사 데이터 센터를 s사에 외주를 주고 있었음. 관리하기 편하기 때문에 : 서버리스
https://byline.network/2022/10/17-204/
Disaster Recovery: 재해가 났을 때 복구를 할 수 있는 설계 구조
전략? 서버가 죽으면 다른 서버를 사용 실시간 서버는 따로 두어서 사용자에게 실시간으로 정보를 제공할 수 있도록 함. DB는 그럼..? 24개 서버중에 6대~8대가 DB 백업을 겁나 많이 함. DB도 다른 서버와 연결되도록 세팅함.
health check를 하는 서버를 따로 둔다는 아이디어 굿~! 실제로 그렇게 하는 팀이 있음
health check=> ping을 때려서 정상적인 운영을 하는지 물어봄 health check의 주기는?! "1시간"
그럼 비용은 어떻게 할거야?

  • 물리적으로 나누는 것, 원격에서 켜져야하는 것
  • 24개가 4개씩 따로 존재 총 6군데 존재
  • 대표 거점 : 용인, 대전 둘 중에 하나 데이터 센터
  • 이거는 보통 금융권에서 물어보지 않음
  • 소비자 이탈이 더 중요함, 비용이 문제가 아님.

자바 컬렉션 API 중 Map이 뭐예요?

DB대신에 DB역할을 하는 걸 대신 세워놓은 것, DB가 오면 대체하면 됨

자바 컬렉션 api를 왜 💪api✌️라고 하는지? 클래스 구현 상속과 상관없이 인터페이스화해서 자료구조를 제공한다.

구현체들을 사용할 수 있도록 껍데기를 제공하기 때문에 interface라고 부를 수 있음, 공통된 메소드를 사용할 수 있기 때문에, 자료구조를 제공하고 있기 때문에 덩어리를 갖다쓰렴~
사용하는 컬렉션의 인터페이스가 최상단에 세우져 있고,아래 친구들을 구현체로 사용 담아서 쓰는 것이 많은 일들이다.

map과 db의 비교 맵이 뭐길래 db대신 쓸 수 있는지?

각 row을 식별할 수 있는 column을 존재해야 함.
id가 없다고 치면 식별하기가 어려움 id=key, value=한 row, 데이터 한 줄=객체(Person)

  • 배열과 리스트는 다른건가요? 가장 큰 차이점: 동적이다. 리스트는 인덱스가 있고, 삽입/수정/삭제가 어디든 가능한 나열/일렬로 된 데이터 구조 즉, 리스트는 중간 삭제, 추가가 가능하지만 배열은 불가능함. 출석부: 배열, MT 출석: 리스트

원형큐

큐:먼저 들어간 애가 먼저 나옴.
원형큐는 왜 생겨났을까? linear queue에서 극단적으로 생각했을 때 100명이 있을 때 한 명이 사라졌을 때 99명이 앞으로 당겨야하는 비효율적인 일이 발생함=> 원형큐 먼저 타세요~ abcdef->gbcdef 화살표가 한칸씩 이동해서 원형처럼 돌아서 "원형큐" (나머지 연산자를 사용)

자료구조?

문제를 해결하는데 반복적으로(?) 사용되는 데이터의 효율적인 저장 방식, 형식과 구조.
독자적으로 데이터으로 불러올 때 알고리즘과 같은 동작 방식
데이터를 저장하는 방식으로 알고리즘을 사용하여 데이터를 저장하거나 불러온다.

알고리즘?

문제를 해결하는 절차

profile
@gari_guri

0개의 댓글