728x90
반응형
2024.08.08기준 - 실버4
728x90
백준, BEAKJOON, BOJ, JAVA, 자바
풀이
이 문제는 수열이 입력될 때 하나의 수열을 선택해 양옆을 포함해 1씩 더할 때 짝수번쨰 수열과 홀수번쨰 수열의 합을 똑같게 만드는 문제입니다.
접근 방법
- 결국 합이 같아야 되기 때문에 조금 쉽게 풀면 짝수가 2가 올라가면 홀수가 1이 올라가고, 홀수가 2가 올라가면 짝수가 1이 올라갑니다.
- 이걸 좀 더 쉽게 풀면 홀수 또는 짝수에 1을 더하는 것과 같습니다.
- 모든 최대 수를 입력받으면 합이 100억까지 가기 때문에 변수 타입을 long으로 설정합니다.
- 전체 수열의 길이가 3일 때는 무조건 홀수가 2 짝수가 1이 올라가기 때문에 주의해주어야 합니다.
1. 입력받은 수열을 짝수와 홀수의 합으로 나눕니다.
// 짝수의 합
long even = 0;
// 홀수의 합
long odd = 0;
for (int i = 1; i <= n; i++) {
if (i % 2 == 0) {
even += Long.parseLong(st.nextToken());
} else {
odd += Long.parseLong(st.nextToken());
}
}
2. 전체 연산은 전체 수열이 3일 때 홀수가 큰 경우만 제외하면 큰 값에서 작은 값을 뺀 수와 같습니다.
long count = 0;
// 전체 수열이 3일 때는 무조건 홀수가 2 짝수가 1이 올라간다.
if (n == 3 && even < odd) {
count = -1;
} else {
// 짝수가 크다면
if (even > odd) {
count = even - odd;
// 홀수가 크다면
} else {
count = odd - even;
}
}
코드
package Main;
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int n = Integer.parseInt(br.readLine()); // 수열의 길이
StringTokenizer st = new StringTokenizer(br.readLine());
// 짝수의 합
long even = 0;
// 홀수의 합
long odd = 0;
for (int i = 1; i <= n; i++) {
if (i % 2 == 0) {
even += Long.parseLong(st.nextToken());
} else {
odd += Long.parseLong(st.nextToken());
}
}
long count = 0;
// 전체 수열이 3일 때는 무조건 홀수가 2 짝수가 1이 올라간다.
if (n == 3 && even < odd) {
count = -1;
} else {
// 짝수가 크다면
if (even > odd) {
count = even - odd;
// 홀수가 크다면
} else {
count = odd - even;
}
}
bw.write(Long.toString(count));
bw.flush();
bw.close();
br.close();
}
}
728x90
반응형
'코딩테스트 일기 (BAEKJOON)' 카테고리의 다른 글
BEAKJOON / 백준 - JAVA 32090번 シンプルなエディタ (0) | 2024.08.09 |
---|---|
BEAKJOON / 백준 - JAVA 32089번 部員の変遷 (0) | 2024.08.09 |
BEAKJOON / 백준 - JAVA 22993번 서든어택3 (0) | 2024.08.08 |
BEAKJOON / 백준 - JAVA 5430번 AC (0) | 2024.08.08 |
BEAKJOON / 백준 - JAVA 27294번 몇개고? (0) | 2024.08.08 |