Post

[BOJ/백준] 3533번 : Explicit Formula (Java)

📘 백준 3533번 : Explicit Formula


문제 바로가기


💡 문제 풀이


쌍과 삼중조합 중 적어도 하나의 변수가 1인 경우의 개수를 세어야 함. (문제에 명시)

쌍과 삼중조합은 합(or)로 계산되므로 하나라도 1이면 결과가 1.

따라서 모두 0인 조합을 센 후 전체 경우의 수에서 모두 0인 조합의 경우의 수를 빼기.

  • 결과가 1인 쌍의 개수 = 45 - nC2 (n은 0인 변수의 개수)

  • 결과가 1인 삼중조합의 개수 = 120 - nC3 (n은 0인 변수의 개수)

최종 함수 결과 (결과가 1인 쌍 개수 + 결과가 1인 삼중조합 개수) % 2가 1이면 1, 아니면 0 출력


✅ 코드 (Java)


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

// https://www.acmicpc.net/problem/3533
// 쌍과 삼중조합 중 하나의 변수가 1인 경우의 개수를 세어야 함(문제에 명시)
// 쌍과 삼중조합은 합(or)로 계산되므로 하나라도 1이면 결과가 1
// 따라서 모두 0인 조합을 센 후 전체 경우의 수에서 모두 0인 조합의 경우의 수를 빼기
// 결과가 1인 쌍의 개수 = 45 - nC2 (n은 0인 변수의 개수)
// 결과가 1인 삼중조합의 개수 = 120 - nC3 (n은 0인 변수의 개수)
// 최종 함수 결과 (결과가 1인 쌍 개수 + 결과가 1인 삼중조합 개수) % 2가 1이면 1, 아니면 0 출력
public class B3533_Explicit_Formula {
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine());
		int zeroCnt = 0; // 10개의 변수 중 0인 개수
		for (int i = 0; i < 10; i++) { // zeroCnt 세기
			if (Integer.parseInt(st.nextToken()) == 0) {
				zeroCnt++;
			}
		}
		int onePairsCnt = 45 - (zeroCnt * (zeroCnt - 1) / 2); // 결과가 1인 쌍의 개수
		int oneTripletsCnt = 120 - (zeroCnt * (zeroCnt - 1) * (zeroCnt - 2) / 6); // 결과가 1인 삼중조합의 개수
		System.out.println(((onePairsCnt + oneTripletsCnt) % 2 == 1) ? 1 : 0); // 함수 결과 출력
		br.close();
	}
}


💾 제출 결과


보러 가기