코린이의 소소한 공부노트

[LeetCode/Easy] 1854. Maximum Population Year 본문

코딩테스트 풀이/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;

- 메모리는 덜 먹는데 여전히 느리다.