728x90
반응형
배열 a에 있는 숫자 중에서 두 번 이상 나타난 숫자 중에서, 두 번째 등장한 순서의 인덱스가 최소인 숫자를 찾는 문제입니다.
예를 들어, 주어진 배열이 [2, 1, 3, 5, 3, 2]인 경우:
2는 두 번 등장했지만 두 번째 등장한 2의 인덱스는 5이므로 고려하지 않습니다.
1은 한 번만 등장하므로 고려하지 않습니다.
3은 두 번 등장하고, 두 번째 등장한 3의 인덱스는 4입니다.
5는 한 번만 등장하므로 고려하지 않습니다.
따라서 이 경우에는 3이 문제의 답이 됩니다.
각 경우에 대해 어떤 숫자가 두 번 이상 나타났고, 그 중 두 번째 등장한 인덱스가 최소인지 확인하면서 답을 찾을 수 있습니다. 만약 그러한 숫자가 없다면 -1을 반환합니다.
int solution(int[] a) {
Dictionary<int,int> dic = new Dictionary<int,int>();
Dictionary<int,int> count = new Dictionary<int,int>();
for(int k = 0;k<a.Length;k++){
if(count.ContainsKey(a[k]) && count[a[k]]==1){
dic[a[k]] = k;
count[a[k]]++;
}
else if(!count.ContainsKey(a[k])){
dic[a[k]] = k;
count[a[k]]=1;
}
}
Array.Sort(a);
int maxIdx = 100001;
int ret = -1;
for(int i = 0;i<a.Length-1;i++){
if(a[i] == a[i+1]){
if(maxIdx > dic[a[i]]){
maxIdx = dic[a[i]];
ret = a[i];
}
}
}
return ret;
}
주어진 배열 a에서 두 번 이상 등장한 숫자 중에서, 두 번째 등장한 순서의 인덱스가 최소인 숫자를 찾는 함수를 구현한 것입니다. 코드는 다음과 같은 단계로 동작합니다:
dic: 숫자가 처음 등장한 인덱스를 저장하는 Dictionary입니다.
count: 각 숫자가 몇 번 등장했는지를 저장하는 Dictionary입니다.
배열 a를 순회하면서 각 숫자에 대한 처리를 수행합니다.
만약 count에 해당 숫자가 이미 등장했고, 그 숫자가 한 번 등장했다면(count[a[k]]==1), 해당 숫자의 등장한 인덱스를 dic에 저장하고, count를 증가시킵니다.
만약 count에 해당 숫자가 등장한 적이 없다면, 해당 숫자의 등장한 인덱스를 dic에 저장하고, count를 1로 초기화합니다.
배열 a를 정렬합니다.
정렬된 배열을 순회하면서 두 번 이상 등장한 숫자 중에서 두 번째 등장한 순서의 인덱스가 최소인 숫자를 찾습니다. 이때, dic에서 해당 숫자의 인덱스를 가져와서 비교합니다.
찾은 숫자를 반환합니다.
이 코드는 배열을 한 번 순회하면서 각 숫자의 등장 인덱스를 기록하고, 그 후에 정렬된 배열을 순회하면서 조건에 맞는 숫자를 찾아 반환합니다. 최종적으로 찾은 숫자가 문제에서 원하는 조건을 만족하는 결과를 반환하는 구조입니다.
728x90
반응형
'CodeSignal' 카테고리의 다른 글
commonCharacterCount (0) | 2023.11.28 |
---|---|
All Longest Strings (0) | 2023.11.27 |
matrixElementsSum (0) | 2023.11.25 |
Almost Increasing Sequence (0) | 2023.11.25 |
Make Array Consecutive 2 (0) | 2023.11.22 |