코딩테스트 풀이/JAVA
[LeetCode/Easy] 1854. Maximum Population Year
무지맘
2023. 4. 21. 12:05
1. Input
1) int[][] logs
- i번째 사람은 logs[i][0]에 태어나서 logs[i][1]에 죽었다.
2. Output
1) 인구 수가 가장 많은 연도를 출력한다.
2) 연도가 여러 개라면 가장 빠른 연도를 출력한다.
3) 살아있는 연도에 죽은 연도는 포함하지 않는다.
3. Constraint
1) 1 <= logs.length <= 100
2) 1950 <= birth_i < death_i <= 2050
4. Example
Input: logs = [[1950,1961],[1960,1971],[1970,1981]] -> Output: 1960
설명: 1960년과 1970년에 2명으로 가장 많은 인구 수가 있었는데, 더 빠른 것은 1960년이므로 이를 반환한다.
5. Code
1) 첫 코드(2023/04/21)
HashMap<Integer,Integer> m = new HashMap<>();
int max = 0;
for(int i=0 ; i<logs.length ; i++){
for(int j=logs[i][0] ; j<logs[i][1] ; j++){
m.put(j, m.getOrDefault(j,0)+1);
if(m.get(j)>max)
max = m.get(j);
}
}
ArrayList<Integer> year = new ArrayList<>();
Iterator it = m.entrySet().iterator();
while(it.hasNext()){
Map.Entry e = (Map.Entry)it.next();
if(max==(int)e.getValue())
year.add((int)e.getKey());
}
year.sort(Comparator.naturalOrder());
return year.get(0);
2) 1번 코드가 너무너무 심각하게 구려서 살짝 손 본 코드(2023/04/21)
int max = 0;
for(int i=0 ; i<logs.length ; i++){
for(int j=logs[i][0] ; j<logs[i][1] ; j++){
m.put(j, m.getOrDefault(j,0)+1);
if(m.get(j)>max)
max = m.get(j);
}
}
int min = Integer.MAX_VALUE;
Iterator it = m.entrySet().iterator();
while(it.hasNext()){
Map.Entry e = (Map.Entry)it.next();
if(max==(int)e.getValue()){
int year = (int)e.getKey();
if(year<min)
min = year;
}
}
return min;
- 메모리는 덜 먹는데 여전히 느리다.