오늘은 여기까지
[백준/18230] 2xN 예쁜 타일링 - Java 자바 본문
https://www.acmicpc.net/problem/18230
개념: 그리디
접근
- N이 홀수라면 2x1 타일 하나를 우선 선택한다.
- N/2번 동안 for문을 돌면서
- 2x2 타일 1개 vs 2x1 타일 2개 값을 비교한다. 값이 더 큰 경우를 선택한다.
전체코드
import java.util.*;
import java.io.*;
public class Main
{
static int N, A, B;
static ArrayList<Integer> twoByOne;
static ArrayList<Integer> twoByTwo;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
N = Integer.parseInt(st.nextToken());
A = Integer.parseInt(st.nextToken());
B = Integer.parseInt(st.nextToken());
twoByOne = new ArrayList<>();
st = new StringTokenizer(br.readLine());
for (int i = 0; i < A; i++) {
twoByOne.add(Integer.parseInt(st.nextToken()));
}
twoByTwo = new ArrayList<>();
st = new StringTokenizer(br.readLine());
for (int i = 0; i < B; i++) {
twoByTwo.add(Integer.parseInt(st.nextToken()));
}
twoByOne.sort(Comparator.reverseOrder());
twoByTwo.sort(Comparator.reverseOrder());
int answer = 0;
if (N % 2 == 1) {
answer += twoByOne.get(0);
twoByOne.remove(0);
}
for (int i = 0; i < N/2; i++) {
int case1 = 0;
int case2 = 0;
if (twoByOne.size() >= 2) {
case1 = twoByOne.get(0) + twoByOne.get(1);
}
if (twoByTwo.size() >= 1) {
case2 = twoByTwo.get(0);
}
if (case1 > case2) {
answer += case1;
twoByOne.remove(0);
twoByOne.remove(0);
} else {
answer += case2;
twoByTwo.remove(0);
}
}
System.out.println(answer);
}
}
'Problem Solving' 카테고리의 다른 글
[백준/1541] 잃어버린 괄호 - Java 자바 (1) | 2024.11.05 |
---|---|
[백준/1931] 회의실 배정 - Java 자바 (0) | 2024.11.05 |
[프로그래머스] 메뉴 리뉴얼 - Python 파이썬 (0) | 2024.10.31 |
[프로그래머스] 신고 결과 받기 - Java 자바 (0) | 2024.10.30 |
[프로그래머스] 베스트 앨범 - Java 자바 (0) | 2024.10.29 |