링크 : https://codility.com/programmers/lessons/10-prime_and_composite_numbers/flags/ 문제> * 배열 A에서 0 A[P+1] 인 값들을 찾아 Peak를 만든다.(중간중간 튀는 높은 값을 뽑으라는 소리) * K는 플래그(깃발) 간의 간격이자 Peak에 설치가능한 최대 플래그(깃발) 수. - K번째 플래그 사용시 두 플래그 사이의 거리는 K보다 커야한다. * 플래그 사이간격은 절대값이다. * 이때 최대 설치 가능한 플래그(깃발) 수를 구하라. 해결방법. 1) A[P-1] A[P+1]인 P를 담은 Peaks리스트를 생성. *리스트 수가 3보다 작으면 위의 식이 성립 안되기 때..
링크 : https://codility.com/programmers/lessons/4-counting_elements/missing_integer/ 문제> 주어진 배열 A에서 발생하지않은 0보다 큰 양의 정수를 반환하라. 해결방법. * A를 정렬. * HashSet로 중복제거.(퍼포먼스를 위함) * A를 리스트로 변환 후 1보다 작은 수들 제거. * 만약 A의 데이터 수가 1보다 작거나 1이 없다면 1을 반환. - 아니라면 순차적으로 누락값(A[i + 1]과 A[i]의 차가 1이상)을 찾는다. - 누락값이 없다면 A의 최종값에 +1을 해서 반환. using System; using System.Collections.Generic; class Solution { public int solution(int[..
링크 : https://codility.com/programmers/lessons/7-stacks_and_queues/fish/ 문제> * N개의 정수는 N개의 물고기(A배열 : 물고기의 크기, B배열 : 물고기의 방향.)를 나타낸다. * P(번째) < Q(번째)인 물고기라면 P물고기는 Q보다 상류에 있다. * A배열의 모든 요소는 유일하다. * A배열의 더 큰 물고기는 작은 물고기를 먹는다. * B배열의 값은 0또는 1만 포함하고 0은 물고기가 상류로 1은 물고기가 하류로 향한다. * 같은방향의 물고기 끼리는 절대 만나지 않는다. * 살아 남은 물고기의 숫자를 구하라. 해결방법. *스택사용. 1) 헤엄치는 중인 물고기 번호를 체크할 Stack을 만든다. 2) 물고기 수 까지 1씩 증가하는 반복문을 돌린..
링크 : https://codility.com/programmers/lessons/3-time_complexity/tape_equilibrium/ 문제> *n개의 배열에서 A[0]~A[p-1]까지의 합(=P)과 A[p]~A[n-1]까지의 합(=N)의 차(P-N)의 절대값을 구해 가장 작은 수를 출력하라. **P = A[0] +.. + A[p-1]); **N = A[p] +.. + A[n-1]; **abs = |P - N|; 해결방법 0. ( 정확도 100%, 퍼포먼스 33% ) 쓰레기.. *) 2중 for문 사용. 1) 첫번째 for문에서 A의 0~n-1개 까지 누적으로 더하고( = P) - 내부의 두번째 for문 p 부터 n - 1을 더한다( = N) - N과 P를 뺀 절대값을 누적해서 더 작은 값이 ..
링크 : https://www.hackerrank.com/challenges/picking-numbers/problem 문제> *두 수를 뺀 절대값이 1이하인 수의 집합 중 가장 수가 많은 집합을 구하라. *집합 내에서 어떤 수들과 계산해도 1이하가 나와야 한다. 해결방법. 1) 데이터를 리스트A로 만들어 정렬. 2) key에 숫자 value 숫자의 수를 넣을 딕셔너리B 생성. 3) 반복문을 돌면서 - 리스트A의 0번째 값을 딕셔너리B의 키값으로 0번째 값을 리스트A에서 전부 지우고 지운 수를 value로 추가해준다. - 리스트A의 데이터 수가 0이 될때까지 반복. 4) 딕셔너리B를 순차로 읽어온다. - 딕셔너리B의 이전값과 현재값 사이의 key값 차를 구해서 절대값이 1보다 작거나 같으면 두 값의 va..