다시 풀었는데 테캐 1개틀림
[인덱스 부분 실수한거임.. 인덱스가 ㅈㄴ 중요함 진짜 실수 많이함 이부분에서]
-> start end 한칸씩 이동해주는 것을 투포인터 알고리즘이라고 하나봄
가장 중요한 점은.. adv_time을 1칸씩 옮기는 개념인데..
나같은 경우는 당연히 0부터 시작해서 adv_time에 해당하는 index가 가진 값 박아주고
또 1부터 시작해서 index+1까지 박아주고 멍청하게 했음..
[앞에 인덱스의 값 1개 지우고 뒤에 인덱스의 값 1개 추가하면됨]
출처 : https://www.youtube.com/watch?v=Xx5bk_EP8tQ
해설에는 완전 탐색, 브루트 포스인데 케이스 2개가 틀림 1개는 시간 초과, 하나는 그냥 틀린 것
알고보니 나는 무식하게 광고시간을 한칸씩 옮겼는데 그럴 필요 없이 처음 구한 것에서
첫번째 인덱스 값 빼주고 마지막인덱스+1에 해당하는 다음 값을 넣어주면서 이동시켜주면 됐다..
그렇게 바꿔줬는데 갑자기 테케 2번
실행한 결괏값 "69:59:59"이(가) 기댓값 "01:00:00"와(과) 다릅니다. |
이렇게 뜸.. 뒤에 있는 값으로 갱신 됐음
계속 해매는 중..
공식에서 오류가 있었다..
total_viewer = total_viewer + viewer[i] - viewer[i-advSec];를
total_viewer = max_viewer+ viewer[i] - viewer[i-advSec]; 이렇게 씀..
total_viewer의 값에서 앞에는 빼주고 뒤는 더해주는 식을 작성하려면 기본값이 total_viewer이어야 하는데
왠 엉뚱한 max_viewer를 넣어줘서 이렇게 됐나보다...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
|
import java.text.DecimalFormat;
import java.util.StringTokenizer;
class Solution {
static int[] viewer;
public static String solution(String play_time, String adv_time, String[] logs) {
int playSec = totalSec(play_time);
int advSec = totalSec(adv_time);
// System.out.println(ptSec);
viewer = new int[playSec];
for(String log : logs) {
String[] log_time = log.split("-");
int start = totalSec(log_time[0]);
int end = totalSec(log_time[1]);
for(int i=start; i<end; i++) {
viewer[i]++;
}
}
long total_viewer = 0;
for(int i=0; i<advSec;i++){
total_viewer+=viewer[i];
}
int resultSec = 0;
long max_viewer =total_viewer;
for(int i=advSec; i<playSec; i++){
total_viewer = total_viewer + viewer[i] - viewer[i-advSec];
if(total_viewer>max_viewer){
max_viewer=total_viewer;
resultSec=i-advSec+1;
if(resultSec==70*3600-1 || resultSec==3600){
System.out.println(max_viewer);
}
}
}
DecimalFormat df = new DecimalFormat("00");
StringBuilder sBuilder = new StringBuilder();
sBuilder.append(df.format(resultSec/3600)+":");
resultSec%=3600;
sBuilder.append(df.format(resultSec/60)+":");
resultSec%=60;
sBuilder.append(df.format(resultSec));
String answer = sBuilder.toString();
return answer;
}
private static int totalSec(String time) {
StringTokenizer stk = new StringTokenizer(time,":");
int totalSec =
Integer.parseInt(stk.nextToken())*60*60+
Integer.parseInt(stk.nextToken())*60+
Integer.parseInt(stk.nextToken());
return totalSec;
}
}
|
cs |
'알고리즘 풀이 > 프로그래머스' 카테고리의 다른 글
[프로그래머스][JAVA] 거리두기 확인하기 (BFS, 완전탐색) (0) | 2021.09.11 |
---|---|
[프로그래머스][JAVA] 광고 삽입 (string 문자 치환) (0) | 2021.09.11 |
[프로그래머스][JAVA] 합승 택시 요금 (그래프, DP, 플로이드 와샬) (0) | 2021.09.08 |
[프로그래머스][JAVA] 순위 검색 (HashMap, 이진탐색, LowerBound찾기, 비트연산) (0) | 2021.09.07 |
[프로그래머스][JAVA] 메뉴 리뉴얼 (List<Map>, 재귀함수로 DFS) (0) | 2021.09.07 |