[프로그래머스][Java] 무지의 먹방 라이브

2019. 2. 21. 22:02· 알고리즘 풀이/프로그래머스
728x90

완전탐색으로 하는 것이 아닌


먹는 시간이 짧은 순으로 음식을 1개씩 빼는 방식으로 문제를 해결함


음식을 빼다가 문제에서 주어진 k순을 넘어가는 경우를 체크해주어


넘어가기 전의 인덱스를 활용하여 k번째가 어떤 음식인지 찾아야함


Food 클래스를 선언하여 음식을 먹는데 걸리는 시간과 음식 번호를 표시해줌


Food 리스트를 선언해 주어진 food_times에 맞춰서 매칭해줌


Compator를 2개 써야하는데


1개는 시간에 대한 오름차순, 1개는 인덱스에 대한 오름차순을 위해 선언함


시간에 대한 오름차순으로 sorting 해주고


앞서 말한 음식 1개씩 빼는 방식으로 for문돌리다가


문제에서 요구하는 k번째 넘게 도달했을 때 따로 이벤트 처리해준 후


앞서 선언한 foods 배열에서 해당하는 index값을 return해준다



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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
import java.util.*;

class Solution {
    class Food{
        int time;
        int idx;
        Food(int t, int i){
            time = t;
            idx = i;
        }
    }

    public int solution(int[] food_times, long k) {
        int answer = 0;
        List<Food> foods = new LinkedList<Food>(); 
        int n = food_times.length; // 남아 있는 음식 수

        for (int i = 0; i < n; i++) {
            foods.add(new Food(food_times[i],i+1));
        }

        Comparator<Food> CompTime = new Comparator<Food>() {

            @Override
            public int compare(Food a, Food b) {
                // TODO Auto-generated method stub
                return a.time-b.time;
            }
        };
        Comparator<Food> CompIdx = new Comparator<Food>() {

            @Override
            public int compare(Food a, Food b) {
                // TODO Auto-generated method stub
                return a.idx-b.idx;
            }
        };

        foods.sort(CompTime);

        int pretime = 0;
        int i = 0;
        for (Food f : foods) {
            long diff = f.time - pretime;
            if(diff!=0) {
                long spend = diff * n ;
                if(spend <= k) {
                    k-=spend;
                    pretime = f.time;
                }
                else {
                    k%=n;
                    foods.subList(i, food_times.length).sort(CompIdx);
                    return foods.get(i+(int)k).idx;
                }
            }
            i++;
            n--;
        }

        return -1;
    }
}


참고 : https://www.youtube.com/watch?v=4MWxAt4fx5I&index=4&list=PL6YHvWRMtz7CyRH31LhCHR0gp_x7eeSK6

'알고리즘 풀이 > 프로그래머스' 카테고리의 다른 글

[프로그래머스][Java] K번째 수  (0) 2019.02.22
[프로그래머스][Java] 모의고사  (0) 2019.02.22
[프로그래머스][Java] 실패율  (0) 2019.02.21
[프로그래머스][Java] 오픈채팅방  (0) 2019.02.20
[프로그래머스][Java] 완주하지 못한 선수  (0) 2019.02.20
'알고리즘 풀이/프로그래머스' 카테고리의 다른 글
  • [프로그래머스][Java] K번째 수
  • [프로그래머스][Java] 모의고사
  • [프로그래머스][Java] 실패율
  • [프로그래머스][Java] 오픈채팅방
배게
배게
백엔드배게 님의 블로그입니다.
배게
백엔드
배게
전체
오늘
어제
  • 분류 전체보기 (430)
    • 알고리즘 풀이 (338)
      • 백준 (167)
      • Codility (22)
      • 프로그래머스 (123)
      • LeetCode (2)
      • CodeForces (9)
      • SWEA (15)
    • 백엔드 (11)
    • Coding existing for (3)
    • 무지성 메모 (40)
    • Debug (30)
    • 자바 (8)

블로그 메뉴

  • 홈
  • 태그
  • 미디어로그
  • 위치로그
  • 방명록

공지사항

인기 글

태그

  • 카톡
  • MYSQL
  • 카톡 내보내기한 파일 정렬
  • hibernate
  • 카카오톡
  • 카카오톡 txt파일 정렬

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.1
배게
[프로그래머스][Java] 무지의 먹방 라이브
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.