728x90
반응형
2024.06.26기준 - 실버3
백준, BEAKJOON, BOJ, JAVA, 자바
풀이
이 문제는 조건에 맞게 카드 게임시 플레이어가 얻을 수 있는 총 점수의 제일 큰 값을 출력하는 문제입니다.
이 문제의 핵심은 플레이어와 딜러 둘 다 카드를 더미 카트를 제외하고 소모하거나, 최대 턴 수가 되면 게임이 종료된다는 점입니다.
다른게 생각하면 양수의 값은 최대 턴 수에 맞춰 얻을 수 있지만, 만약 음수의 점수를 얻어야 된다면 더미 카드만 왔다 갔다 하면서 턴을 소비할 수 있다는 소리입니다.
1. 카드를 하나의 배열에 저장해 플레이어가 얻는 점수는 score에 더 해 점수를 얻고 딜러에게 주는 카드는 remove를 통해 없애는 방식으로 접근했습니다.
List<Integer> list = new LinkedList<>(); // 카드를 저장하는 리스트
st = new StringTokenizer(br.readLine());
for (int i = 0 ; i < n; i++) {
list.add(Integer.parseInt(st.nextToken()));
}
2. 얻은 카드를 점수 별로 정렬을 해줬습니다.
// 점수의 기준으로 내림차순 정렬
Collections.sort(list, (o1, o2) -> o2 - o1);
3. 정렬된 카드의 리스트 인덱스 0번이 양수이면 점수를 더하고, 가장 낮은 값의 카드를 딜러에게 줍니다.
만약 리스트 인덱스 0번의 카드가 음수라면 더미 카드만으로 모든 턴을 소비해 점수에 영향이 없도록 해줍니다.
while (m-- > 0) {
if (list.get(0) > 0) {
score += list.get(0);
list.remove(0);
if (list.size() != 0) {
list.remove(list.size() - 1);
}
} else { // 음수만 있다면 더미 카드만 왔다 갔다 해서 턴 수를 소모할 수 있다.
break;
}
if (list.size() == 0) { // 모든 카드가 없어지면 종료
break;
}
}
코드
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));
StringTokenizer st = new StringTokenizer(br.readLine());
int n = Integer.parseInt(st.nextToken()); // 정수가 적힌 카드의 수
int m = Integer.parseInt(st.nextToken()); // 게임의 최대 턴 수
List<Integer> list = new LinkedList<>(); // 카드를 저장하는 리스트
st = new StringTokenizer(br.readLine());
for (int i = 0 ; i < n; i++) {
list.add(Integer.parseInt(st.nextToken()));
}
// 점수의 기준으로 내림차순 정렬
Collections.sort(list, (o1, o2) -> o2 - o1);
int score = 0; // 플레이어의 총 합
while (m-- > 0) {
if (list.get(0) > 0) {
score += list.get(0);
list.remove(0);
if (list.size() != 0) {
list.remove(list.size() - 1);
}
} else { // 음수만 있다면 더미 카드만 왔다 갔다 해서 턴 수를 소모할 수 있다.
break;
}
if (list.size() == 0) { // 모든 카드가 없어지면 종료
break;
}
}
bw.write(Integer.toString(score));
bw.flush();
bw.close();
br.close();
}
}
728x90
반응형
'코딩테스트 일기 (BAEKJOON)' 카테고리의 다른 글
BAEKJOON / 백준 - JAVA 27466번 그래서 대회 이름 뭐로 하죠 (0) | 2024.06.28 |
---|---|
BAEKJOON / 백준 - JAVA 29198번 이번에는 C번이 문자열 (0) | 2024.06.27 |
BAEKJOON / 백준 - JAVA 31747번 점호 (0) | 2024.06.25 |
BAEKJOON / 백준 - JAVA 1389번 케빈 베이컨의 6단계 법칙 (0) | 2024.06.24 |
BAEKJOON / 백준 - JAVA 14231번 박스 포장 (0) | 2024.06.23 |