tempcru 삽질기록

Codility - Tape Equilibrium 풀이 (java) 본문

Coding Test/Codility

Codility - Tape Equilibrium 풀이 (java)

dev-tempcru 2022. 1. 5. 14:32

Codility - Tape Equilibrium 풀이 (java)

https://app.codility.com/programmers/lessons/3-time_complexity/tape_equilibrium/

 

TapeEquilibrium coding task - Learn to Code - Codility

Minimize the value |(A[0] + ... + A[P-1]) - (A[P] + ... + A[N-1])|.

app.codility.com

  • 배열을 둘로 나눴을 때 부분배열의 차가 최소가 되는 값을 찾아라

 

풀이


  • SUM[i] = A[0] + A[1] + ... + A[i] 인 배열을 만들고
  • P 연산시 sum[i],  sum[N-1] - sum[i] 의 차를 계산해주면된다
public class TapeEquilibrium {

	public static void main(String[] args) {
		int[] A = {-1000,1000};
		
		System.out.println(solution(A));
	}

	private static int solution(int[] A) {

		// init
		int result = Integer.MAX_VALUE;
		int N = A.length;
		
		// pre calc
		int[] sum = new int[N];
		sum[0] = A[0]; 
		for(int i = 1; i < N; i++) {
			sum[i] = sum[i-1] + A[i];
		}
		
		// logic
		int p1, p2, difference ;
		for(int i = 0; i < N-1; i++) { 
			p1 = sum[i];
			p2 = sum[N-1] - sum[i];
			difference = (p1 - p2);
			if(difference < 0) difference *= -1;
			if(result > difference) result = difference;
		} 
		
		return result;
	}
}