문제 : boj12981
당연히 3개씩 넣는게 가장 좋으며, 그게 안된다면 2개씩, 그것도 안된다면 1개씩이라도 넣으면 된다. 이건 당연한건데 문제는 박스에 들어가는 공의 색은 모두 다르거나, 모두 같아야 한다는 제약때문에 순서를 잘 정해야 한다.
내 경우 이하의 로직으로 풀었다.
1. 우선 가능한 만큼 모두 다른색으로 3개를 박스에 넣는다. (따라서 정렬 후, 가장 낮은 값을 나머지 2개에서 빼줬다.)
2. 이제 3개씩 넣을 수 있는 방법은 모두 같은 색으로 3개를 넣는 방법 뿐이다. 따라서 남은 2개의 색상은 각각 3개씩 가능한 만큼 넣어준다.
3. '2'에서 남은 공운 1개 아니면 2개일 것이다(3개씩 넣었으므로). 이 때 가능한 경우는 다음과 같다.
3.1 둘다 남은게 0개인 경우 -> 모두 3개씩 들어간 경우이다. 1~2에서 구한것만 출력해주면 된다.
3.2 한쪽이 남은게 0인 경우 -> 나머지 하나를 상자 하나에 넣어주면 된다. 1~2에서 구한 값 + 1을 출력해주면 된다.
3.3 둘 다 1개씩 남은 경우 -> 이 경우 2개짜리 상자 하나만 있으면 된다. 마찬가지로 +1을 출력해준다.
3.4 이제 남은 경우는 둘 다 2개인 경우와 둘이 1개와 2개가 남은 경우 -> 이 경우엔 +2를 해줘야 한다.
위 로직대로 구현을 해주면 된다.
코드 : github
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
public class Main {
private void solution() throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int[] arr = new int[3];
for (int i = 0; i < 3; i++) arr[i] = Integer.parseInt(st.nextToken());
Arrays.sort(arr);
int cnt = arr[0];
arr[1]-=arr[0];
arr[2]-=arr[0];
cnt += arr[1]/3 + arr[2]/3;
cnt += arr[1]%3!=0 ? 1 : 0;
cnt += arr[2]%3!=0 ? 1 : 0;
if (arr[1]%3 == 1 && arr[2]%3 == 1)
cnt--;
System.out.println(cnt);
}
public static void main(String[] args) throws Exception {
new Main().solution();
}
}
'PS > BOJ' 카테고리의 다른 글
[자바] 백준 8892 - 팰린드롬 (boj java) (0) | 2022.05.09 |
---|---|
[자바] 백준 2480 - 주사위 세개 (boj java) (0) | 2022.05.09 |
[자바] 백준 19939 - 박 터뜨리기 (boj java) (0) | 2022.05.07 |
[자바] 백준 22155 - Простая задача (boj java) (0) | 2022.05.06 |
[자바] 백준 24586 - Code Guessing (boj java) (0) | 2022.05.05 |
댓글