문제
int형 배열과 정수 k를 입력받는데, 배열 요소에 정수 k를 더 했을 경우 k를 더하지 않은 요소들과 비교해가장 큰 수가 될 경우를 카운팅해서 출력하는 문제이다.
예를 들어 2,3,5,2 배열이 주어지고 정수 3이 주어지면 첫 번째 요소( 2 )에 정수k인 3을 더하면 5가 되는데 나머지 요소와 비교했을 때 가장 큰 수가 아니기 때문에 카운트하지 않게 된다.
이렇게 차레대로 비교를 하면 되는데 요소 3일 경우와 5일 경우는 정수 k를 더했을 때 요소중 가장 큰 수가 되기 때문에 출력 결과는 2를 출력하면 된다.
조건 : 요소 비교 중 값이 같을 경우는 가장 큰수가 될 수 없다.
풀이
처음 생각하기에는 처음 요소를 다른 요소와 비교하면서 가장 크다고 판단되면 카운트해서 그 카운트가 배열의 길이에서 1을 뺀 수와 같으면(자기 자신을 제외한 다른 요소들의 개수) 가장 크다고 판단하여 그 개수를 출력하려고 했지만..
위에 경우 처럼 배열의 길이에서 1을 뺀 값을 나를 제외한 나머지 요소들의 개수라고 판단해버리면 배열 요소 중 자신과 같은 값을 갖고 있는 요소가 있게 되면 요소에 k를 더한 후 비교할 때 동점인 경우는 체크하지 않기 때문에 카운트 값이 맞지 않는다.
반대로 생각해보면 k를 더한 요소보다 더하지 않은 요소중에 더 큰 경우가 있다면? 더 비교할 필요도 없이 그 요소는 배열의 요소중 가장 큰 요소라고 할 수 없다.
if(i!=j && vote[j] >= max) : 자기 자신과의 비교는 제외하고, 배열의 요소중 더 큰 값이 있다면 break 키워드로 반복문을 빠져나온다.
if(cnt ==0 ) : cnt가 0인 경우가 자기 자신이 가장 큰 경우(k를 더했을 때)이기 때문에 cnt가 '0'인 요소일 때 resscent를 증가시키고 최종적으로 반환한다.
cnt를 bool 플래그로 쓴 것이다.
arcde46
'알고리즘자료구조 > 알고리즘문제' 카테고리의 다른 글
03.28_CodeSignal (0) | 2019.03.28 |
---|---|
03.27_CodeSignal (0) | 2019.03.27 |
03.26_CodeSignal (0) | 2019.03.26 |
02.05_CodeSignal(체스 말판) (0) | 2019.02.05 |
02.03_CodeSignal(자릿수를 줄인 가장 큰 수) (0) | 2019.02.03 |