비트마스크 4

백준(BOJ) 1182 : 부분수열의 합 (실버2) / 자바(Java) 풀이

문제https://www.acmicpc.net/problem/11823줄 요약정수의 개수 N과 목표 값 S, 그리고 N개의 정수로 이루어진 배열 A를 입력받습니다.비트마스킹을 활용하여 모든 부분 집합(2^N)에 대해 선택된 정수의 합을 계산하고, 그 합이 목표 값 S와 일치하는 경우의 수를 구합니다.비트마스킹을 통해 각 정수의 선택 여부를 확인합니다. i & (1 선택된 정수들의 합을 계산하고, 그 합이 목표 값 S와 일치하는 경우 answer를 증가시킵니다.부분 집합의 합이 S와 일치하는 경우의 수를 출력합니다. 이 문제에서는 비트 연산을 활용하여 부분 집합을 효율적으로 생성하고 합을 계산함으로써 문제를 해결할 수 있습니다.코드// package boj1182;import java.io.*;import..

Problem_Solving 2024.05.10

백준(BOJ) 2961 : 도영이가 만든 맛있는 음식 (실버2) / 자바(Java) 풀이

문제https://www.acmicpc.net/problem/2961 3줄 요약재료의 개수 N과 각 재료의 신맛과 쓴맛 정보를 입력받아 2차원 배열에 저장합니다.비트마스킹을 활용하여 모든 부분 집합(2^N)에 대해 선택된 재료의 신맛과 쓴맛을 계산하고, 그 차이의 절댓값 중 최솟값을 구합니다.비트마스킹을 통해 각 재료의 선택 여부를 확인합니다. i & (1 선택된 재료의 신맛은 곱셈 연산을 통해 누적하고, 쓴맛은 덧셈 연산을 통해 누적합니다.신맛과 쓴맛의 차이의 절댓값 중 최솟값을 출력합니다. 이 문제에서는 비트 연산을 활용하여 부분 집합을 생성하고 계산함으로써 효율적인 알고리즘을 구현할 수 있습니다.코드// package boj2961;import java.io.*;import java.util.Arr..

Problem_Solving 2024.05.09

백준(BOJ) 11723 : 집합 (실버5) / 자바(Java) 풀이

문제https://www.acmicpc.net/problem/117233줄 요약비트마스킹을 활용하여 집합의 상태를 저장할 변수 set을 초기화하고, 주어진 연산을 순차적으로 수행합니다.각 연산에서는 비트 연산자를 사용하여 집합의 상태를 변경하거나 확인합니다."add" 연산은 비트 OR 연산(|=)을 통해 해당 비트를 1로 설정하여 원소를 추가합니다."check" 연산은 비트 AND 연산(&)을 통해 해당 비트가 1인지 확인하여 원소의 존재 여부를 판단합니다."remove" 연산은 비트 AND 연산(&=)과 비트 NOT 연산(~)을 통해 해당 비트를 0으로 설정하여 원소를 제거합니다."toggle" 연산은 비트 XOR 연산(^=)을 통해 해당 비트를 반전시켜 원소의 존재 여부를 토글합니다.비트마스킹을 활용..

Problem_Solving 2024.05.09

백준(BOJ) 1094 : 막대기 (실버5) / 자바(Java) 풀이

문제https://www.acmicpc.net/problem/10943줄 요약막대의 길이 X를 입력받고, 초기 막대의 길이를 64cm로 설정합니다.현재 막대의 길이가 X보다 작거나 같으면 막대를 사용하고 count를 증가시키고, 비트 연산자 >>=를 사용하여 막대의 길이를 반으로 줄이는 과정을 X가 0이 될 때까지 반복합니다. (비트 연산자 >>=는 오른쪽 시프트 연산으로, 비트를 오른쪽으로 이동시켜 값을 반으로 줄이는 역할을 합니다. 이는 2의 거듭제곱 형태인 막대의 길이를 효율적으로 처리할 수 있습니다.)최종적으로 사용된 막대의 개수 count를 출력합니다. 이 문제에서는 비트마스킹을 활용하여 막대의 길이를 반으로 줄이는 과정을 간단히 구현할 수 있습니다.코드package boj1094;import ..

Problem_Solving 2024.05.09