티스토리 뷰
링크 : 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보다 작거나 같으면 두 값의 value를 더한다.
- 계산된 value를 outputCount에 저장해두었다가 다음 번에 들어오는 value의 합과 비교해 들어온 값이 크다면 교체해준다.
- outputCount가 0이라면 현재의 value를 입력해준다.
5) 만약 가장 많은 숫자의 수가 outputCount보다 크다면 교체해준다.(뺀값보다 차이가 0이나는 숫자가 더 많을 때를 위함)
'주간 알고리즘풀기' 카테고리의 다른 글
[171116][Codility](C#)Missing Integer (0) | 2017.11.20 |
---|---|
[171117][Codility](C#)Fish (0) | 2017.11.20 |
[171115][Codility](C#)TapeEquilibrium (0) | 2017.11.16 |
[171110][HackerRank](C#)Jim and the Orders (0) | 2017.11.14 |
[171109][HackerRank](C#)Missing Numbers (0) | 2017.11.10 |