[C++]level 1秘密地図50067
📌 秘密の地図
📌に答える
この問題はKakao解説にも以下のように書かれている.
これはビット操作の問題です.問題例にはバイナリ形式で処理するプロンプトが含まれており、そのうちの1つが1の場合、壁#が表示されるため、ORを使用すると解法が簡略化されます.簡単な質問だったのでifelseで説明している人がたくさん見つかりましたこれは正解とみなされますが、ビット演算に関する問題なので、将来このような問題を解決する際には、ビット演算を必ず覚えておいてください.この問題の正解率は81.78%だった.
問題では、I/Oの例を示し、次の写真を示します.
暗号化されたスキームは、地図の各水平線上にあります. 1、空白部分を 0に符号化したときに得られるバイナリ値の配列.
この二つを見るとこの問題の核心です!論理!それがor演算(|)であることがわかります.
2つの値
3-1. 1(壁)の場合は、解答欄のiの位置に「#」を付けます.
3-2. 0(空白)の場合、答え配列のi位置に「」を付けます.
//stringを加えるとappend()!
(temp & (i << j) == temp값과 1 << j (1을 j만큼 shift)한 값과 AND연산하여 인덱스 값 구함
ex. temp == 10101
4번째 비트 값 : 10101 & (1 << 3) = 10101 & 01000 → 0
5번째 비트 값 : 10101 & (1 << 4) = 10101 & 10000 → 10000
注意事項📌コード#コード#
#include <string>
#include <vector>
using namespace std;
vector<string> solution(int n, vector<int> arr1, vector<int> arr2)
{
vector<string> answer(n, ""); //n개 짜리 백터를 ""로 초기화
for (int i = 0; i < n; i++)
{
int bit = arr1[i] | arr2[i]; //row별로 비트 계산
for (int j = n - 1; j >= 0; j--)
{
if (bit & (1 << j))
{ //최하위 비트부터 탐색(1 << j)!! 해당 위치의 인덱스 값 반환
//append()는 string의 함수
answer[i].append("#");
}
else
{
answer[i].append(" ");
}
}
}
return answer;
}
振り返るこの問題の友達は同期と一緒に試験問題認証の勉強をしていて、ビット演算で解くことを勧められたので、もう一度解いてみました.
前回もビット演算で解決した問題でしたが、解答がわかったら近づきやすいのですが、解答を思い出すまで頭で考える問題なので覚えておいて、待っていてください.
ビット演算!!!!勉强しましょう!!!!!!!!
参考資料
Reference
この問題について([C++]level 1秘密地図50067), 我々は、より多くの情報をここで見つけました https://velog.io/@hyejungg/C-level1-비밀지도-50067テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol