알고리즘
[카카오/신입공채] 1번 비밀지도(정답률81%)
심재철
2017. 10. 8. 16:58
풀긴 풀었는데 여러번 수정해서 풀었다.. 시간을 좀 줄여야겠다
나는 비트연산으로 안풀고 스트링으로 풀었다 근데 다시 생각해보니까 정수 두개를 비트연산 | 해주고 나서 1인지 0인지 체크해서 # 또는 공백으로 바꾸는 방법도 있겠다.
이 문제 푸는데 거의 20~30분 걸린거 같다. 좀더 시간을 줄이자
다음에 비트연산으로 다시 풀어보자.
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 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 | #include<iostream> #include<algorithm> #include<vector> using namespace std; int n; int arr1[17]; int arr2[17]; vector<string> strv; string convert(int a){ string str; while(a!=0) { str = (char)(a%2+'0') + str; a/=2; } int size = str.size(); if(size!=n) { for(int i=0; i<n-size; i++) str = '0' + str; } return str; } int main() { cin>>n; for(int i=0; i<n; i++) cin>>arr1[i]; for(int i=0; i<n; i++) cin>>arr2[i]; convert(1); for(int i=0; i<n; i++) { string str1 = convert(arr1[i]); string str2 = convert(arr2[i]); string result; for(int j=0; j<str1.size(); j++) { if(str1[j] == '1' || str2[j] == '1') result+='#'; else result+=' '; } strv.push_back(result); } for(int i=0; i<strv.size(); i++) cout<<strv[i]<<endl; return 0; } | cs |
#include <bitset>
int main()
{
int a=9;
int b=30;
int c = a|b;
cout<<c<<endl;
cout<<bitset<5>(c)<<endl;
return 0;
}
다음엔 이 방식으로 풀어보자