본문 바로가기

알고리즘/배열

(5)
프로그래머스 - 로또의 최고 순위와 최저 순위 본 알고리즘 풀이는 Routine Study에서 진행하고 있습니다. 저를 포함한 구성원이 대부분 초보이므로, 원하시는분은 언제라도 들어오셔도 좋습니다. 문의는 댓글 바람. 문제 출처 : https://programmers.co.kr/learn/courses/30/lessons/77484?language=java [접근 방법] 로또 번호를 매번 선행순회를 하면서 맞는지 확인하려면 시간복잡도가 O(n^2)이 된다. 로또번호는 중복되지 않으니, HashSet을 이용하여 검색하는 것이 훨씬 빨라보인다. HashSet의 경우 값을 해쉬 함수를 이용하여 특정 메모리의 저장하기 때문에, 검색속도는 O(1)이다. 결과적으로 모든 번호를 검색하는데 걸리는 시간은 O(n)이 된다. import java.util.HashS..
1200. Minimum Absolute Difference 본 알고리즘 풀이는 Routine Study에서 진행하고 있습니다. 저를 포함한 구성원이 대부분 초보이므로, 원하시는분은 언제라도 들어오셔도 좋습니다. 문의는 댓글 바람. 팀 알고리즘 레포지토리 주소 문제 출처 [처음 생각한 접근 방법] 일단 두 수의 차이가 가장 작으려면, 가장 인접한 숫자여야 한다고 생각했습니다. 즉, 정렬 되어 있는 상태에서 양옆에 있어야 가장 인접한 숫자고 그럴 경우 두 수의 차이가 가장 작을 것이다. 따라서 아래와 같은 식으로 코드를 짜자고 마음을 먹었습니다. 1. 오름차순 정렬 2. 배열의 모든 원소들을 각각 인접한 요소끼리의 차를 구하고 그 값이 최솟값인 애를 pivot(기준)으로 둔다. 3. 배열의 모든 원소들의 각각 인접한 요소끼리의 차를 구하고 그 값이 pivot인 애를..
1122. Relative Sort Array 본 알고리즘 풀이는 Routine Study에서 진행하고 있습니다. 저를 포함한 구성원이 대부분 초보이므로, 원하시는분은 언제라도 들어오셔도 좋습니다. 문의는 댓글 바람. 팀 알고리즘 레포지토리 주소 GitHub - ROUTINE-STUDY/Algorithm: 초보 알고리즘 스터디 / 누구나 참여 가능 초보 알고리즘 스터디 / 누구나 참여 가능 :runner:. Contribute to ROUTINE-STUDY/Algorithm development by creating an account on GitHub. github.com 문제 출처 Relative Sort Array - LeetCode Level up your coding skills and quickly land a job. This is th..
169. Majority Element 출처 Majority Element - LeetCode Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com [문제 설명] 제일 많이 나온 원소를 리턴하시오. 참고로 제일 많이 나온 원소는 절반 이상 나옵니다. [처음 생각한 접근 방법] 1번 풀이 맵에 키는 숫자, 값은 숫자 개수로 넣어서 값이 n/2보다 커지면 키를 리턴. 매번 키를 넣을 때마다 map에서 조회를 하기 때문에 느림. 2번 풀이 1번이랑 똑같은 방식인데 맵에 값을 다 넣고 조회를 해줌. 맵에 값(숫자의 개수)가 절반보..
Find the Winner of the Circular Game 시계 방향으로 원에 n만큼 사람이 있음. 처음 인덱스에서 시작해서 k번째 인덱스를 삭제함. 삭제한 인덱스에서 k번째 사람을 또 삭제함. 1명 남을 때까지 반복. 답지 보기 전에 짠 코드 import java.util.ArrayList; import java.util.List; class Solution { public int findTheWinner(int n, int k) { List list = new ArrayList(); //요소들을 담을 리스트. for (int i = 1; i 1) { //인덱스에 증가값을 더해줌. (자기 자신부터 세므로 -1함) index += cycle-1; //인덱스가 list보다 크면 리스트를 한 바퀴 이상 돈 것임. if (index >= list.size()) { /..