쵼쥬 2021. 10. 21. 23:50


풀이 방법

먼저 주어진 문자열을 나눠서 시간을 int로 나타내서 계산해주었다. 

각 범위를 계산해 주기 위해 변화가 있는 로그가 시작하고 끝나는 모든 지점에서 1초 범위로 속하는 로그들의 개수를 세어주었다.

범위에 속하기 위해

  1. 시작점이 범위 안에 들어 있는 경우 
  2. 끝나는 지점이 범위 안에 들어 있는 경우
  3. 시작점과 끝나는 지점이 범위보다 클 경우 

이 세가지 경우를 생각해서 count해 주었다.

 

 

내 코드

import java.util.*;

class Solution {
    public int solution(String[] lines) {    
        int[][] array = new int[lines.length][2];
        
        for(int i = 0 ; i < lines.length; i++){
            double x = 60 * 60 * Integer.parseInt(lines[i].substring(11, 13)) + 60 * Integer.parseInt(lines[i].substring(14, 16)) + Integer.parseInt(lines[i].substring(17, 19)) + Double.parseDouble("0." + lines[i].substring(20, 23));
            double y = Double.parseDouble(lines[i].substring(24, lines[i].length()-1));

            array[i][0] = (int)(1000 * x - 1000 * y + 1);
            array[i][1] = (int)(1000 * x);
                        
            if(array[i][0] < 0)
                array[i][0] = 0;
        }
        
        int max = 0;
        
        for(int i  = 0 ; i < array.length; i++){
            
            for(int k = 0; k< 2; k++){
                int count = 0;
                
                for(int j = 0; j < array.length; j++){
                    if(array[i][k] <= array[j][0] && array[i][k] + 999 >= array[j][0] 
                    || array[i][k] + 999 >= array[j][1] && array[j][1] >= array[i][k] 
                    || array[i][k] >= array[j][0] && array[i][k] + 999 <= array[j][1])
                        count++;

                }
                max = Math.max(max, count);
            }
        }
        
        return max;
    }
}