"꾸준하고 완벽한 한 걸음"

bitmasking 2

[백준 11811] 데스스타 [Java]

문제11811번: 데스스타 11811번: 데스스타 boj.ma 풀이i번째와 j번째 요소의 AND 연산 결과가 저장된 행렬의 대각선 행렬을 구하는 문제다.임의의 A(i)를 구하기 위해서는 A(j)를 제외한 i 행의 AND 연산 결과를 만족하는 M(i, j)를 구해야 한다.최소한의 조건을 만족하는 M(i, j)는 여러 개가 존재할 수 있으며 이 중 아무거나 출력하면 된다.따라서 최소한의 조건을 만족하는 M(i, j)를 구하기 위해 i행의 모든 연산 결과에 대해 OR을 적용했다. // Solve for (int i = 0; i 모든 연산 결과에 OR 연산을 한 M(i, j)는 어떤 A(j)와 AND 연산을 하더라도 올바른 결과를 얻을 수 있다.풀이 시간5분소스코드https://github.c..

[백준 01052] 물병 [Java]

문제https://www.acmicpc.net/problem/1052 풀이N개의 병을 2개씩 합쳐서 하나의 병으로 만드는 문제다.만약 K개의 병으로 만들 수 없다면 병을 한 개 더 추가해 다시 합칠 수 있다.2개의 병을 한 개의 병으로 합치기 때문에 N을 최대로 합칠 수 있는 병의 수는 N을 이진수로 했을 때 1의 개수와 동일하다.예제 1번은 다음과 같다.1 1 1 1 1 1 1 1 1 1 1 1 12 2 2 2 2 2 14 4 4 18 4 1$13=1101_{(2)}$으로 필요한 병의 수는 3개지만, K는 2이므로 병을 더 추가해야 한다.$14 = 1110_{(2)}$에 대해 K는 2, 추가된 병은 1개다. 14개의 병을 합쳐 총 3개의 병에 { 8, 4, 2 }담을 수 있다.이를 코드로 구현하면 다음..