inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비

5. K번째 큰 수(영상 후반 TreeSet 추가설명)

TreeSet을 사용하는 이유

153

hyun

작성한 질문수 17

0

안녕하세요! 저는 HashSet을 사용해서 풀었는데요!

public int solution(int n, int k, int[] arr) {
    int answer = -1;
    // HashSet으로 변경
    Set<Integer> set = new HashSet<>();

    // 모든 3개 조합의 합을 HashSet에 추가
    for (int i = 0; i < n; i++) {
        for (int j = i + 1; j < n; j++) {
            for (int l = j + 1; l < n; l++) {
                set.add(arr[i] + arr[j] + arr[l]);
            }
        }
    }

    // HashSet을 List로 변환
    List<Integer> list = new ArrayList<>(set);

    // 내림차순 정렬
    Collections.sort(list, Collections.reverseOrder());

    // K번째 값 반환
    if (list.size() >= k) {
        return list.get(k - 1);
    }
    return answer;
}

커뮤니티 보니 treeSet을 사용하는 이유가 "같은 숫자의 카드가 여러장 있을 수 있습니다."라고 하셨는데,

강의 내에 코드는 3개의 카드를 더한 값에 대한 중복 제거지, 각 카드 숫자에 대한 중복을 제거하는건 아니지 않나요..??

hashSet을 사용하는게 O(n3)로 시간복잡도가 더 나은 것 같은데 treeSet을 사용해야 하는 이유를 아직 이해 못했습니다 ㅠㅠ

java 코딩-테스트

답변 1

0

김태원

안녕하세요^^

3개를 더한 값의 중복을 제거하기 위해 셋을 사용한게 맞습니다.

TreeSet을 사용한 것은 TreeSet이 정렬을 자동 지원하기 때문에 사용한 것입니다.

ArrayList로 변환한 다음 정렬을 하기보다는 트리셋을 사용하면 바로 정렬이 되기 때문입니다.

안녕하세요. 바뀐 채점사이트 관련해서 문의드립니다.

0

33

1

갑자기 채점 사이트가 바뀌었어요

0

34

1

문제 리스트 페이지

0

29

1

채점 사이트 관련 질문드립니다

0

24

1

봉우리 문제 질문입니다

0

84

2

씨름 선수 문제에서 각 선수의 몸무게나 키가 같을 수도 있다면?

0

65

0

이 코드랑 영상 코드중에 뭐가 더 좋은 코드인가요?

0

72

0

가중치 방향 그래프에서 가중치가 0인 간선을 표현하는 방법

0

67

1

좌표 정렬 문제 이 코드가 왜 틀린지 모르겠습니다 ㅠㅠ

0

85

2

6-7 강의에서

0

48

1

6-6. 장난꾸러기 질문 있습니다.

0

46

1

강의 수강후 코딩테스트

0

111

1

answer 변수 사용 여부

0

46

1

2중 for문

1

85

2

2-11. 임시반장정하기 (Runtime Error)

0

63

1

혹시 LinkedList 같은 자료 구조들은 따로 배우지 않나요?

0

70

1

이런 풀이는 어떨까요

0

44

1

자바 스트림 방식의 효율성 질문 드립니다.

0

57

1

알고리즘 자료 구조들..

0

63

1

StringBuilder vs BufferdWriter

0

48

1

원더랜드(프림)

0

50

1

이런 코드는 어떤가요?

0

61

1

bfs 풀이

0

57

1

병합정렬

0

57

1