💡 코테/99클럽

[ 99클럽 코테 스터디 32일차 TIL ] Collections 및 프로그래머스 (명예의 전당(1))

MNY 2024. 5. 2. 23:55
728x90
반응형
💡 오늘의 학습 키워드

- Collections 주요 메소드
- 프로그래머스
    * 명예의 전당(1) : 비기너 문제

 

Collections 주요 메소드

  • max : 지정된 컬렉션에서 최대 요소를 반환
  • min : 지정된 컬렉션에서 최대 요소를 반환
  • sort : 지정된 컬렉션 정렬
  • shuffle : 지정된 컬렉션의 요소들의 순서를 무작위로 섞기
  • synchronizedCollection : 지정된 컬렉션에 의해 지원되는 동기화 된 컬렉션을 재생성해 반환
  • binarySearch : 지정된 컬렉션에서 이진 탐색 알고리즘을 사용해 지정된 객체를 검색해 인덱스를 반환
  • disjoint : 2개의 지정된 컬렉션들에서 공통된 요소가 하나도 없는 경우 true를 반환
  • copy : 지정된 컬렉션의 모든 요소를 새로운 컬렉션으로 복사해 반환
  • reverse : 지정된 컬렉션에 있는 순서를 역으로 변경

* 참고한 블로그

 

[Java] Collections 클래스

Java collection과 관련된 이름들이 아주 많고, 따라서 어떻게 표현하는지에 따라 가리키는 값이 달라진다.저번 포스팅에 이어, 오늘은 Collections에 대해 집중적으로 파고 넘어가고자 한다.지난 포스

velog.io

 


 

오늘의 회고

문제1  : [명예의 전당(1)]

  • 어떤 문제가 있었고, 나는 어떤 시도를 했는지

저장할 점수의 개수k, 점수들 score 배열을 입력받는다. 

score에서 k개의 점수를 저장할 수 있으며,

k개를 넘어설 때 저장된 k개의 점수 중 최솟값과 score의 점수 중에서 score이 크다면 저장할 점수를 업데이트 해준다. 반면, 저장된 k개의 점수 중 최솟값이 score보다 더 크다면 업데이트 하지 않는다.

 

일단, LinkedList를 사용해야 겠다고 생각했다. 

삽입과 삭제가 빈번하게 일어나니 LinkedList가 더 효율이 좋을 것이라고 판단했다.

그러고 k까지는 계속 저장만 하니 for문을 2개로 나누었다.

  • k전의 인덱스까지는 저장하고 최솟값을 sort로 찾아 answer에 저장해준다.
  • k부터는 만약에 저장된 최솟값이 입력된 값 보다 크다면 업데이트 하지 않고 저장되어 있는 값 중 최솟값을 answer에 저장해준다. 그러고 해당 for문은 continue를 해준다.
  • 그게 아니라면, 최솟값을 지우고 새로운 값을 추가해준 후 sort를 이용해 최솟값을 answer에 집어 넣어준다.

여기까지가 첫 번째 시도였다.

생각보다 조회가 많아 LinkedList에서 ArrayList로 바꿔도 보고

Collections.sort를 Collections.min이라는 것이 있어 그걸로도 바꿔보았다.

 

하지만, 계속 92.3이었기에.. 다른 사람의 블로그를 참고해보았다.

결국 나와 비슷하게 했지만? 나는 k를 기준으로 for문을 2개로 나누어서 따로 만들었는데

생각해보니 하나로 합칠 수 있었다...

그래서 하나의 for문으로 합치고 중복되는 코드들은 삭제하고 했더니 통과했다.

 

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

  • 어떻게 해결했는지
import java.util.*;

class Solution {
    public int[] solution(int k, int[] score) {
        int size = score.length;
        int[] answer = new int[size];
        ArrayList<Integer> list = new ArrayList<>();
        
        for (int i = 0; i < size; i++) {
            list.add(score[i]);
            if (list.size() > k) {
                list.remove(Collections.min(list));
            }
            answer[i] = Collections.min(list);
        }
        
        return answer;
    }
}

 

  • 무엇을 새롭게 알았는지

Collections.sort만 알고 있었는데 Collection의 다른 주요 메소드들을 알게되었다.

min과 max도 있을 것 같다고 생각은 했지만, 역시 다 있어서 좋다.

그리고 내배캠에서 LinkedList와 ArrayList를 배운 보람이 있었다. 

배웠다고 해도 어떻게 적용하면될지 어떤 문제에서 적용해야 되는지 활용하는 능력이 많이 부족했는데

이렇게 적용해야겠다고 생각이라도 한 것이 뿌듯하다.

 

내일 학습할 것은 무엇인지 (최대 3개)

  • 클럽99 코딩테스트(미들러) 문제풀이
  • 형변환 마무리~?
  • 네트워크 관리사 공부
  • 내배캠 개인과제 재제출 // 학습은 아니지만..
728x90
반응형