[BOJ] μμ μ΄λ 2μ κ±°λ μ κ³±μ μ’μν΄! μμ μ΄λ 2μ κ±°λ μ κ³±μ μ’μν΄!(20153)
[λ°±μ€(BOJ)] 20153_μμ μ΄λ 2μ κ±°λ μ κ³±μ μ’μν΄! μμ μ΄λ 2μ κ±°λ μ κ³±μ μ’μν΄! C++
λ¬Έμ μ€λͺ
μ°μ n κ°μ μμ°μκ° μ£Όμ΄μ§λλ€.
μ΄ n κ°μ μλ₯Ό λͺ¨λ μ΄μ§μλ‘ λ°κΎΈκ³ κ° μ리μ 1μ κ°μλ₯Ό μ‘°νν©λλ€.
κ° μ리μμ 1μ κ°μκ° νμμ΄λ©΄ μ΅μ’
κ²°κ΄κ°μ (2^μ리μ)λ₯Ό λν΄μ£Όκ³ , μ§μμ΄λ©΄ λνμ§ μμ΅λλ€.
μ΄λ μ΅μ’
κ²°κ΄κ°μ΄ μ΅λκ° λ μ μλλ‘ n κ°μ μμ°μ μ€ μ΅λ νλμ μμ°μλ₯Ό μ μΈν μ μμ΅λλ€.
λ§μ§λ§μΌλ‘ κ²°κ΄κ°μ λμ΄μ°κΈ° μμ΄ λ λ² μΆλ ₯νλ©΄ μ λ΅μ
λλ€.
Solution
μμ νμ, μν
μ£Όμ΄μ§ μ μλ μμ μ΅κ³ κ°μ΄ 2222222μ΄λ―λ‘, κ·Έμ λ§κ² 2222222μ μ«μμ μ΄μ§μλ‘ λ°κΏ¨μ λμ μλ¦Ώμλ₯Ό μ΄μ°¨μ λ°°μ΄λ‘ μ μΈν΄ μ€λλ€.
κ·Έλ° λ€μ κ° μμ°μλ₯Ό μ΄μ§μλ‘ λ°κΎΈκ³ μμ λ§λ λ°°μ΄μ μ리μμ μ 보λ₯Ό λ£μ΄ μ€λλ€.
κ·Έ λ€μ n κ°μ λͺ¨λ μμ°μμ κ° μ΄μ§μ μ리μλ₯Ό κΈ°μ€μΌλ‘ κ³μ°ν μ΅λκ°μ ꡬν λ€, n λ² μννλ©° κ° μμ°μλ₯Ό μ μΈνμ λμ κ°λ€κ³Ό μ΅λκ°μ λΉκ΅ν©λλ€.
μ΄λ κ² μμ νμμΌλ‘ λμ¨ μ΅λκ°μ΄ μ λ΅μ΄ λ©λλ€.
μκ° λ³΅μ‘λκ° κΉλ€λ‘μ΄ λ¬Έμ μ΄λ―λ‘, μ€μΌ μ μλ μ°μ°λ€μ μ΅λν μ€μ¬μΌ ν©λλ€.
Description
- pow ν¨μμ μ¬μ©μ μ€μ΄κΈ° μν΄ μ²μμ λ°°μ΄μ pow ν¨μμ κ°μ λͺ¨λ ν λΉνμ΅λλ€.
#include <iostream>
#include <algorithm>
#include <stack>
#include <cmath>
using namespace std;
int value[23];
int numValue[2222223][23];
int powArr[23];
int main(){
for(int i=0;i<23;i++) powArr[i] = pow(2,i);
int n;
cin >> n;
for(int i=0;i<n;i++){
int num;
cin >> num;
stack<int> s;
int cnt = 0;
while(num){
if(num%2){
numValue[i][cnt]=1;
value[cnt] += 1;
}
num/=2;
cnt++;
}
}
for(int i=0;i<22;i++){
value[i]%=2;
}
int result = 0;
for(int i=22;i>=0;i--){
if(value[i]) result+=powArr[i];
}
int final=result;
for(int i=0;i<n;i++){
int nowResult = result;
for(int j=0;j<22;j++){
if(numValue[i][j]==0) continue;
if(value[j]) nowResult -= powArr[j];
else nowResult += powArr[j];
}
final= max(final,nowResult);
}
cout <<final<< final << '\n';
}