[プログラマー]秘密の地図



こんにちは。


MINDOLです
今は7月中旬で暑すぎます
一人で家でエアコンをつけるのが惜しいので、家の近くの喫茶店に避暑に来ました.
家の近くの小さな喫茶店は人が多くなくて、とても良くて、広まったかどうか分かりませんが、今ではほとんど1万枚のテーブルがあります.
それはつまらないですね.アルゴリズムの問題を見てみましょうか.
質問リンク

秘密の地図




隠れたへそくりの位置を教えてくれる秘密の地図
(でも解読してもどこにへそくりがあるかわからない…)
へそくりを見つけるために、問題を解決しましょう.

整理する

  • 地図1の数字と地図2の数字に対して|(or)ビット演算を用いる.
  • ビット演算で生成された整数をバイナリで表す場合、1を「#'0」と表す.
  • 作成した文字列を
  • のリストに入れ、
  • を返します.
    整数をバイナリで表し、ビット演算子を使用できる場合は、これは容易に解決できる問題です.
    Pythonで解読したコードを見て...!
    def solution(n, arr1, arr2):
    	answer = []
    	for i in range(n):
    		str = ""
    		ret = arr1[i] | arr2[i]		# 비트 연산자 사용
    		cnt = 0
    		while cnt < n:		# 지도 크기 n만큼 수행
    			if ret % 2 == 1:		# 일의 자릿수가 2로 나누어떨어지지 않으면
    				str = '#' + str		# '#' 추가
    			else :
    				str = ' ' + str		# 나누어떨어지면 ' ' 공백 추가
    			ret //= 2		# 다음 자릿수로 이동
    			cnt += 1
    		answer.append(str)		# 문자열 추가
    	return answer
    整数を計算せずにバイナリ文字列に変換し、数学的に分割して文字列を作成します.
    奇数の場合は、2進数日の桁数を1として2に分けて繰り返し、必要な値を得ることができます.
    私のように、文字列を作成するときは、数値桁数から文字に変更されるため、既存の文字列の前に「#」または「」を付ける必要があります.
    どうですか.ビット演算子しか知らない場合は、これは容易に解決できる問題です.
    参考までに、私のように繰り返し文を使用してカウントしたり、解いたりすることはありません.
    bin関数を使用して整数をバイナリ文字列に置き換えます.
    replace関数で「1」と「0」を「#」と「」に置き換えることができます.
    私は問題を解く前にbin関数を知らなかったので、直接2に分けて問題を解きます!
    それでは今日の問題はここまでにしましょう
    こんな暑い日は体に気をつけなさい.

    こんにちは!