일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- LLM
- 3기
- generative
- Stable Diffusion
- KT
- SearchGPT
- SKT
- 네이버
- 생성형
- 인공지능
- GPT-3.5
- TRANSFORMER
- naver
- nlp
- KoGPT
- Meta
- OpenAI
- LLaMA
- gpt
- deeplearning
- ML
- 딥러닝
- ChatGPT
- GPT-4
- GPT4
- 생성형 AI
- AIVLE
- hyperclovaX
- AI
- Today
- Total
Ttoro_Tech
[프로그래머스] '22.11.22. Training Clothes 본문
n = 5
reserve = [1,3,5]
lost = [2,4]
1 3 5 -> 1 3 번이 2 4에게 또는 3 5 번이 2 4에게 줄 수 있음
2 4
탐욕법 (Greedy Algorithm)
1. 알고리즘의 각 단계에서 그 순간에 최적이라고 생각되는 것을 선택
2. 탐욕법으로 최적해를 찾을 수 있는 문제 -> 현재 선택이 마지막까지 최고의 선택일 경우 가능
탐욕법 적용 가능성 확인
2 4 6 만약 2번이 3, 4번이 5 빌려줄 경우? -> 2 3 4 5 6 만 받을 수 있으므로 정답이 아님
1 3 5
따라서 빌려줄 학생들을 "정해진 순서"로 살펴야 하고,
이 "정해진 순서"에 따라 우선하여 빌려줄 방향을 정해야함.
Solution(1)
학생의 수는 기껏해야 30명 -> 학생 수만큼 배열을 확보하고,
여기에 각자가 가지고 있는 체육복의 수를 기록함
-> 번호 순서대로 "Scan"하면서 빌려줄 관계를 정함.
여벌을 가져온 학생 처리 : reserve의 길이에 비례
체육복을 잃어버린 학생 처리 : lost의 길이에 비례
체육복 빌려주기 처리 : 전체 학생 수 (n)에 비례 -> O(n)
Solution(2)
만약 전체 학생 수가 매우 크다면?
but -> 문제의 성질상 O(n)보다 낮은 복잡도 알고리즘은 어려움
그런데 여벌의 체육복을 가져온 학생은 매우 적다면?
여벌의 체육복을 가져온 학생들의 번호(reserve)를 정렬하고,
이것을 하나 하나 순서대로 살펴보면서
빌려줄 수 있는 다른 학생을 찾아서 처리한다!
-> Hash를 적욯해서 상수 시간내 처리
-> O(k) * O(1) // 여벌을 가져왔지만, 잃어버린 경우도 처리해야 하므로
번호를 정렬할 경우 reserve = k개인 경우 O(klogk) -- N > k가 많이 작을 경우
'Coding Test' 카테고리의 다른 글
[프로그래머스] '22.11.29. Booking (0) | 2022.11.29 |
---|---|
[프로그래머스] '22.11.22. Biggest Number (0) | 2022.11.23 |
[프로그래머스] '22.11.22. Make Big Number (0) | 2022.11.22 |
[프로그래머스] '22.11.16. Programmers Bell (0) | 2022.11.16 |
[프로그래머스] '22.11.16. Programmers 문제 풀이 (0) | 2022.11.16 |