본문 바로가기
  • 개발하는 곰돌이

비트마스킹3

[Kotlin] 백준 27960 : 사격 내기 문제 링크 27960번: 사격 내기 A, B, C는 올해에도 예비군 훈련을 받으러 간다. 이번 예비군 훈련 과정 중에는 영점 사격이 있으며, 10개의 과녁 각각에 점수를 매겨 맞춘 과녁 점수의 총합을 측정한다. 과녁을 맞혔을 때, 과녁별 www.acmicpc.net 문제 해설 과녁별 점수가 \(2^n\)의 형태이고 각 과녁은 사람별로 최대 한 번만 맞힐 수 있다는 점에 주목하면 된다. 즉, A와 B의 점수는 2진수로 표현했을 때 맞힌 표적이 1이고 빗맞힌 표적이 0으로 표현된다. 여기서 C는 둘 중 한명만 맞힌 표적은 다 맞히고, 둘 다 맞히거나 둘 다 빗맞힌 표적은 빗맞혔다고 한다. 이는 C의 점수가 곧 각 비트를 XOR 연산한 결과와 같다는 뜻이 된다. Code fun main()=print(read.. 2023. 4. 20.
[Kotlin] 백준 24389 : 2의 보수 문제 링크 24389번: 2의 보수 컴퓨터는 뺄셈을 처리할 때 내부적으로 2의 보수를 사용한다. 어떤 수의 2의 보수는 해당하는 숫자의 모든 비트를 반전시킨 뒤, 1을 더해 만들 수 있다. 이때, 32비트 기준으로 처음 표현했던 수와 www.acmicpc.net 문제 해설 문제를 보자마자 숏코딩 욕심이 나서 풀어본 문제이다. 컴퓨터가 뺄셈을 처리할 때 2의 보수를 사용하는데, 이로 인해 뺄셈은 2의 보수의 합으로 나타낼 수 있다. 예를 들어 \(10-3\)이라는 식이 있을 때 이는 \(10+(-3)\)으로도 표현할 수 있다. 위의 내용과 종합해보면 \(-3\)이 \(3\)의 2의 보수가 되는 것이다. 즉, 어떤 수 \(n\)의 2의 보수는 \(-n\)과 같다. 두 수의 서로 다른 비트 수는 두 수를 XO.. 2023. 3. 30.
[Kotlin] 백준 1094 : 막대기 문제 링크 1094번: 막대기 지민이는 길이가 64cm인 막대를 가지고 있다. 어느 날, 그는 길이가 Xcm인 막대가 가지고 싶어졌다. 지민이는 원래 가지고 있던 막대를 더 작은 막대로 자른다음에, 풀로 붙여서 길이가 Xcm인 막대 www.acmicpc.net 문제 해설 간단한 비트마스킹 문제다. 지문을 보면 64에서 반복적으로 연산을 진행하여 더한 횟수를 구해야할 것 같지만 문제의 조건을 보면 시작하는 막대 길이가 64(26)cm라는 점이 명시되어 있다. 즉, 이전 막대를 반으로 나눈 새 막대는 모두 2의 거듭제곱수라는 사실을 알 수 있다. 다시 말해, 나눠진 각 막대는 2진수로 표현하면 모두 다른 자리에 1이 하나만 존재하므로 X를 2진수로 바꿨을 때 1의 개수가 곧 문제의 답이 된다. Code fu.. 2022. 11. 23.