[プログラマースコット練習]秘密地図
問題の概要
地図は、エッジ長がnの正方形の配列形式で、各セルは「空白」(「」)または「壁」(「#」)から構成されています.
地図全体を2枚の地図で重ねることができます.
地図1または地図2のいずれかは壁の部分であり、地図全体においても壁であり、すべての空白の部分のみが地図全体においても空白である.
「地図1」と「地図2」はそれぞれ整数配列で暗号化されている.
暗号化された配列は,地図の横線ごとに壁を1に符号化し,スペースを0に符号化したときのバイナリ値の配列である.
元の秘密地図を復号し、「#」と出力し、スペースからなる文字列の配列です.
私の答え
def solution(n, arr1,arr2):
answer = []
arr_1 = []
arr_2 = []
for i in arr1:
a = ""
while i>=2:
a += str(i%2)
i //= 2
if i<2:
a += str(i)
a = a[::-1] if len(a)==n else "0"*(n-len(a))+ a[::-1]
arr_1.append(a)
for i in arr2:
a = ""
while i>=2:
a += str(i%2)
i //= 2
if i<2:
a += str(i)
a = a[::-1] if len(a)==n else "0"*(n-len(a))+ a[::-1]
arr_2.append(a)
for i in range(n):
a = ""
for j in range(n):
if arr_1[i][j]=="0" and arr_2[i][j]=="0":
a += " "
else:
a += "#"
answer.append(a)
return answer
bin()、zfill()の使用状況を解析する
def solution(n, arr1, arr2):
answer = []
for i,j in zip(arr1,arr2):
a12 = str(bin(i|j)[2:])
a12=a12.zfill(n)
a12=a12.replace('1','#')
a12=a12.replace('0',' ')
answer.append(a12)
return answer
zfill()関数
文字列の長さを指定すると、前から0でスペースを埋めて返します.
s = “91657”.zfill(8)
# 00091657
for i in range(3):
print(str(i).zfill(4))
# 0000
# 0001
# 0002
バイナリ変換関数
bin()
:バイナリ変換、「0 ba」を返します.bin(10) = “0b1010”
bin(301) = “0b100101101”
oct()
:8進数変換、「0 oa」を返します.oct(10) = “0o12”
oct(233) = “0o351”
hex()
:16進数変換、「0 xa」を返します.hex(10) = “0xa”
hex(145) = “0x91”
上記の関数ではなくint(x, 진수정보)
に変換することもできます.int(“0b1010”, 2) = 10
int(“0o12”, 8) = 10
int(“0xa”, 16) = 10
ビット演算子
&
: and|
: or^
: xor~
: notに感銘を与える
Reference
この問題について([プログラマースコット練習]秘密地図), 我々は、より多くの情報をここで見つけました https://velog.io/@kgorae/프로그래머스-코테-연습-비밀지도テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol