728x90
내 풀이
- 배열의 수를 이진법 string으로 만든다. 나머지로 나오는 숫자는 모두 char로 뽑아서 붙인 다음 리버스해줬다.
- 이진수들은 string 배열에 차례로 넣고 둘 중에 하나라도 1이면 벽, 즉 #을 넣고 아니면 공백을 담는다.
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
vector<string> solution(int n, vector<int> arr1, vector<int> arr2) {
vector<string> bin1, bin2;
vector<string> combine;
//이진법 만들기
for (int i = 0; i < n; i++) {
string tmp1, tmp2;
for (int j = 0; j < n; j++) {
//일의자리부터 들어감
tmp1.push_back(arr1[i] % 2 + '0');
tmp2.push_back(arr2[i] % 2 + '0');
arr1[i] /= 2;
arr2[i] /= 2;
}
reverse(tmp1.begin(), tmp1.end());
reverse(tmp2.begin(), tmp2.end());
bin1.push_back(tmp1);
bin2.push_back(tmp2);
}
for (int i = 0; i < n; i++) {
string tmp;
for (int j = 0; j < n; j++) {
bin1[i][j] == '1' || bin2[i][j] == '1' ? tmp.push_back('#') : tmp.push_back(' ');
}
combine.push_back(tmp);
}
return combine;
}
다른 사람의 풀이
- 십진수를 비트연산자로 비교해 이진수끼리 비교 후 조건에 맞게 바꾼 십진수를 처음 배열에 넣었다.
→ 불필요한 변환과정 X, 메모리 사용 감소, 코드 길이 감소 - string을 붙일 때 push_back 이나 += 대신 a = b + a; 방식을 사용해서 따로 리버스하지 않아도 됨.
- string이 아닌 int형 십진수가 대상이므로 [i][j]로 부르지 않고 시프트 연산자를 이용해 2씩 나눠줌.
arr1[i] = arr1[i] >> 1; 은 arr1[i] /= 2; 와 같은 작업.
#include <string>
#include <vector>
using namespace std;
vector<string> solution(int n, vector<int> arr1, vector<int> arr2) {
vector<string> answer;
for(int i=0; i <n; i++){
arr1[i] = arr1[i]|arr2[i];
string ans = "";
for(int j = 0; j<n; j++){
if(arr1[i] % 2 == 0) ans = " " + ans;
else ans = "#" + ans;
arr1[i] = arr1[i] >> 1;
}
answer.push_back(ans);
}
return answer;
}
'[C_C++]코딩테스트 연습 > [프로그래머스] level 1' 카테고리의 다른 글
[C++] 프로그래머스 - 문자열 내 마음대로 정렬하기 (0) | 2021.07.22 |
---|---|
[C++] 프로그래머스 - 다트 게임 (0) | 2021.07.21 |
[C++] 프로그래머스 - 3진법 뒤집기 (0) | 2021.07.18 |
[C++] 프로그래머스 - 실패율 (pair, sort - bool) (0) | 2021.07.18 |
[C++] 프로그래머스 - 숫자 문자열과 영단어 (0) | 2021.07.16 |