250x250
Notice
Recent Posts
Recent Comments
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 막내의막무가내 rxjava
- 프래그먼트
- 막무가내
- 막내의막무가내
- 부스트코스에이스
- 막내의막무가내 코틀린
- 막내의 막무가내
- 막내의막무가내 목표 및 회고
- 막내의막무가내 플러터
- 안드로이드
- 막내의막무가내 안드로이드
- 안드로이드 sunflower
- 막내의막무가내 플러터 flutter
- 주엽역 생활맥주
- 막내의막무가내 코틀린 안드로이드
- 막내의막무가내 일상
- 막내의 막무가내 알고리즘
- 막내의막무가내 SQL
- 안드로이드 Sunflower 스터디
- 2022년 6월 일상
- 부스트코스
- 막내의막무가내 회고 및 목표
- 막내의막무가내 알고리즘
- 막내의막무가내 프로그래밍
- 막내의막무가내 안드로이드 에러 해결
- flutter network call
- 막내의막무가내 코볼 COBOL
- 프로그래머스 알고리즘
- Fragment
- 막내의막무가내 안드로이드 코틀린
Archives
- Today
- Total
막내의 막무가내 프로그래밍 & 일상
[알고리즘] 프로그래머스 구명보트 -그리디(Greedy)- 본문
728x90
https://programmers.co.kr/learn/courses/30/lessons/42885
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
구명보트 그리디 유형의 문제를 풀어봤습니다.
문제의 핵심은 최대 2명이 탈 수 있다는 것입니다.
그리고 최대 2명이라는 조건이 있으니 가장 효율적으로 타는 조건은 가장 무거운 사람과 가장 가벼운 사람이 타게 하는 것입니다.
저는 리스트를 좋아해서 처음에 리스트로 변환해서 풀었는데 밑과 같이 하나에서 시간초과가 떴씁니다. ;;; 리스트 말고 배열로 풀라는 말이겠죠..
import java.util.Collections;
import java.util.LinkedList;
class Solution {
public static void main(String[] args) {
Solution solution = new Solution();
solution.solution(new int[]{70, 80, 50}, 100);
}
public int solution(int[] people, int limit) {
int answer = 0;
LinkedList<Integer> linkedList = new LinkedList<>();
for (int a : people) {
linkedList.add(a);
}
Collections.sort(linkedList);
while (linkedList.size() >= 1) {
if (linkedList.size() >= 2) {
if(linkedList.getLast() + linkedList.getFirst() <= limit){
linkedList.removeFirst();
}
linkedList.removeLast();
answer++;
}else {
answer++;
linkedList.removeLast();
}
}
System.out.println(answer);
return answer;
}
}
위 리스트를 사용해서 시간초과 난 것을
다음과 같이 똑같은 로직으로 배열로 바꿧더니 해결되었습니다.
import java.util.Arrays;
class Solution {
public static void main(String[] args) {
Solution solution = new Solution();
solution.solution(new int[]{70, 80, 50}, 100);
}
public int solution(int[] people, int limit) {
int answer = 0;
int firstIndex = 0;
int lastIndex = people.length - 1;
Arrays.sort(people);
while (lastIndex - firstIndex >= 0){
if(lastIndex - firstIndex >= 1){
if(people[lastIndex] + people[firstIndex] <= limit){
firstIndex++;
}
lastIndex--;
answer++;
}else {
answer++;
lastIndex--;
}
}
System.out.println(answer);
return answer;
}
}
다른 분의 블로그를 보니 코드가 깔끔해서 참고합니다.
if(i==j) 조건의 경우 마지막에 하나가 처리못된 경우에 대한 처리입니다.
5 10, 12 ,15 20 | 25
20 5 -> i=1, j=3
15, 10 -> i=2 , j = 2
while(i>j) 조건에 의하여 하나남은 12처리못함
댓글과 공감은 큰 힘이됩니다.
728x90
Comments