시나리오 : 크기가 n인 정렬되지 않은 정수형 배열에 대해 k개의 연속된 값들의 합이 짝수면 A의 승리, 홀수면 B의 승리다. 하지만 배열의 크기와 값은 B가 정한다. 이에 대해 A가 자신이 이길 확률이 있기는 한지 물어봤다. 우리는 A를 위해 프로그램을 작성한다.
import java.io.*;
import java.lang.*;
import java.util.*;
public class Main {
public static final Scanner scanner = new Scanner(System.in);
/**
* 게임의 규칙에 따라 A가 승리할 수 있는 경우의 수가 존재하는지 검사하는 함수
* 윈도우 = 크기가 일정한 범위를 지칭
* @param data
* @param n
* @param k
* @return true A가 승리할 수 있는 경우의 수가 하나 이상 존재한다면
* @return false else
*/
public static boolean isWinnable(int[] data, int n, int k) {
int winCount = 0;
long sum = 0;
for(int i = 0; i < k; i++){
sum += data[i];
}
//sum := 가장 왼쪽 첫 번째 윈도우의 합
if(sum % 2 == 0){
return true;
}
for(int i = 1; i + k - 1 < n; i++){
//2번째 윈도우 ~ 마지막 윈도우
//i 번째 범위 : data[i] ~ data[i+k-1]범위를 나타낸다.
sum = sum - data[i-1] + data[i+k-1];
if(sum % 2 ==0){
return true;
}
}
return false;
}
public static void main(String[] args) throws Exception {
int n = scanner.nextInt();
int k = scanner.nextInt();
int[] data = new int[n];
for(int i = 0 ; i < n ; i++)
{
data[i] = scanner.nextInt();
}
boolean result = isWinnable(data, n, k);
if(result)
{
System.out.println("YES");
}else{
System.out.println("NO");
}
}
}
10주 완성 알고리즘 코딩테스트 - goorm edu에서 들으실 수 있는 내용입니다.
'알고리즘' 카테고리의 다른 글
입력받은 전화번호 뒷자리 중 가장 많이 입력된 뒷자리 번호를 출력하는 함수 (0) | 2023.06.23 |
---|---|
입력받은 중복 없는 정수형 배열이 정렬시 연속 수열이 될 수 있는지에 대해 판단하는 함수 (0) | 2023.06.20 |
픽셀 수 세기 (0) | 2023.06.19 |
버블정렬 구현하기 (0) | 2023.06.15 |
입력 받은 좌표를 토대로 쌍들 사이 최단거리와 최단거리를 갖는 쌍들의 개수 (0) | 2023.06.14 |