반응형
1).문제 : www.hackerrank.com/challenges/crush
Array Manipulation | HackerRank
Perform m operations on an array and print the maximum of the values.
www.hackerrank.com
주어진 배열에 시작점과 끝점을 제시하고, 시작점~끝점에 더해질 k 값이 주어진다.
시작점~끝점에 각각 K를 더하고 난뒤 최종 배열에서 가장 큰 값을 추출해내는 문제.
2). 풀이 :
2중 for문을 사용해 아주 쉽게 해결 할 수 있다고 생각했다.
하지만 Timeout! 어떻게 풀어야할지 한참 ...아주 한참 머리를 괴롭혔다...
어떻게 하면 for문을 한번만 돌수 있을까......!!!!!!!!!!!!!!!!!!!!
누적합을 사용해서 for문 한번으로 각 항의 값을 알수있었따...
변화값만 사용해서 구하는게 키포인트
누적합의 개념을 처음 알게되었다...
import java.io.*;
import java.math.*;
import java.security.*;
import java.text.*;
import java.util.*;
import java.util.concurrent.*;
import java.util.regex.*;
public class Solution {
// Complete the arrayManipulation function below.
static long arrayManipulation(int n, int[][] queries) {
//0부터시작해서 각 항에 더해진 최대값을 구하는 문제.
//누적합을 구하기위해 길이 +1해준다.
int[] arr = new int[n+1];
for(int i=0; i<queries.length; i++){
int a = queries[i][0];
int b = queries[i][1];
int k = queries[i][2];
//만들어낸 배열에 a,b,k를 적용시켜보자.
//시작점에는 +
arr[a]+=k;
//만약 b+1이 길이보다 짧거나 같을때만
if((b+1)<=n){
//끝지점+1 에 -
arr[b+1]-=k;
}
}
long result = 0;
long temp = 0;
for(int i=1; i<arr.length; i++){
temp+=arr[i];
if(result<temp){
result = temp;
}
}
return result;
}
private static final Scanner scanner = new Scanner(System.in);
public static void main(String[] args) throws IOException {
BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(System.getenv("OUTPUT_PATH")));
String[] nm = scanner.nextLine().split(" ");
int n = Integer.parseInt(nm[0]);
int m = Integer.parseInt(nm[1]);
int[][] queries = new int[m][3];
for (int i = 0; i < m; i++) {
String[] queriesRowItems = scanner.nextLine().split(" ");
scanner.skip("(\r\n|[\n\r\u2028\u2029\u0085])?");
for (int j = 0; j < 3; j++) {
int queriesItem = Integer.parseInt(queriesRowItems[j]);
queries[i][j] = queriesItem;
}
}
long result = arrayManipulation(n, queries);
bufferedWriter.write(String.valueOf(result));
bufferedWriter.newLine();
bufferedWriter.close();
scanner.close();
}
}
반응형
'Java > Algorithm' 카테고리의 다른 글
[Java-Algorithm] HackerRank Java - Two Strings 풀이 (0) | 2021.01.29 |
---|---|
[Java-Algorithm] HackerRank Java - Hash Tables: Ransom Note 풀이 (0) | 2021.01.29 |
[Java-Algorithm] HackerRank Java - Mark and Toys 풀이 (0) | 2021.01.27 |
[Java-Algorithm] HackerRank Java Minimum Swaps 2 풀이 (0) | 2021.01.26 |
[Java-Algorithm] HackerRank Java New Year Chaos 풀이 (0) | 2021.01.26 |