Algorithms 8

[프로그래머스] KAKAO RECRUITMENT 2022 신고결과받기

문제 https://programmers.co.kr/learn/courses/30/lessons/92334 코딩테스트 연습 - 신고 결과 받기 문제 설명 신입사원 무지는 게시판 불량 이용자를 신고하고 처리 결과를 메일로 발송하는 시스템을 개발하려 합니다. 무지가 개발하려는 시스템은 다음과 같습니다. 각 유저는 한 번에 한 명의 programmers.co.kr 접근 제한시간은 [정확성 테스트: 10초]만 존재하므로 불필요한 반복만 줄이면 된다. 네 개의 Hash 자료구조를 사용했다. 1. abuseCntMap: 아이디 별 신고 당한 횟수 Map 2. abuseAndReportIdMap: 각 신고당한 사람이 어떤 사람(아이디)에게 신고 당했는지 기록 3. reportAndAbuseIdMap: 신고한 사람이 ..

Algorithms 2022.03.04

[Codility] PermMissingElem

분석 문제는 워낙 간단하고 쉽다. 단 해당 문제의 Lesson 주제가 Time Complexity인 만큼 시간 복잡도를 최소화하는 것이 문제의 의도로 보인다. 가장 쉽게 떠올릴 수 있는 방법은 N개의 크기 배열 A를 받았을 때 (1부터 N+1)까지의 숫자를 전부 Hash의 Key로 넣고 하나씩 Remove 하는 것이다. 이렇게 하면 가장 마지막에 남는 Key가 답이 된다. 하지만 이 방법은 Hash에 넣는데 N+1번, 그리고 A배열을 순회하며 찾는데 N번 걸리므로 O(n^2)이다. O(N)으로 끝낼 수 있는 방법은 배열을 딱 한 번만 순회하는 것이다. 처음 A 배열을 받으면 1~N+1 숫자의 합을 구한다. 그리고 A 배열을 순회하면서 합에서 값을 한 개씩 뺀다. 이렇게 하면 없는 숫자는 뺄 수 없으므로 ..

Algorithms 2022.02.28

[Codility] OddOccurrencesInArray

제약사항 N is an odd integer within the range [1..1,000,000]; each element of array A is an integer within the range [1..1,000,000,000]; all but one of the values in A occur an even number of times. 간단한 문제다. A에 들어가는 값이 1~10억이므로 배열의 인덱스와 동일하게 처리하기엔 사이즈가 너무 큼 그래서 Hash를 이용해서 발생한 숫자를 Key로, 발생한 횟수를 Value로 사용함 그리고 2로 나눈 나머지가 0이 안되는 것이 홀수번 발생한 것이므로 해당 숫자를 답으로 리턴 Code class Solution { public int solution(in..

Algorithms 2022.02.26

[Codility] CyclicRotation

예외사항을 생각해야 한다. Empty array, input 배열의 크기보다 rotation 횟수가 더 클때, K가 0일 때 등을 추가 테스트 케이스로 넣어준다 Additional Test Case ([], 3) ([1,2,3,4], 5) ([1,2,3,4], 0) Code class Solution { public int[] solution(int[] A, int K) { int[] res = new int[A.length]; // K 값이 A 배열의 길이보다 클 때 중복해서 rotation 하는 것이므로 나머지를 대입 if (A.length != 0 && K > A.length) { K = K % A.length; } // A배열의 크기가 K와 동일하면 로테이션 필요 없음 // A배열의 크기가 0이거..

Algorithms 2022.02.24

[프로그래머스] 모의고사

문제 https://programmers.co.kr/learn/courses/30/lessons/42840 코딩테스트 연습 - 모의고사 수포자는 수학을 포기한 사람의 준말입니다. 수포자 삼인방은 모의고사에 수학 문제를 전부 찍으려 합니다. 수포자는 1번 문제부터 마지막 문제까지 다음과 같이 찍습니다. 1번 수포자가 찍는 programmers.co.kr class Solution { public int[] solution(int[] answers) { int[] answer = {}; Solver sovler = new Solver(); int[] res = new int[3]; for (int i = 0; i < answers.length; i++) { int[] solve = sovler.solve(a..

Algorithms 2022.02.20

[프로그래머스] 완주하지 못한 선수

문제 https://programmers.co.kr/learn/courses/30/lessons/42576 코딩테스트 연습 - 완주하지 못한 선수 수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다. 마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수 programmers.co.kr 오랜만에 공부 시작할 겸 가벼운 문제 풀어봄 주의할 점은 완주한 사람(completion)을 기준으로 해시를 만들고 참여한 사람(participant)을찾는 방식이 아니라, 참여한 사람을 기준으로 해시를 만들고 완주한 사람을 찾아야 한다는 것. 그리고 이름이 중복되는 사람이 여러 사람일 수 있으므로 각 사람의 이름을 count 한 후 ..

Algorithms 2022.02.13