list[-n:]: 뒤에서부터 n번째요소부터 끝까지
list[:-n]: 뒤에서부터 n번째요소 -1까지
def solution(n, arr1, arr2):
answer=[]
for a in arr1:
new=[]
for i in range(n-1,-1,-1):
if a>=2**(i):
a=a-2**(i)
new.append('1')
else:
new.append('0')
answer.append(''.join(new))
answer2=[]
for a in arr2:
new=[]
for i in range(n-1,-1,-1):
if a>=2**(i):
a=a-2**(i)
new.append('1')
else:
new.append('0')
answer2.append(''.join(new))
real=[]
for i,j in zip(answer,answer2):
final=[]
for x in range(n):
if '1' in i[x] or '1' in j[x]:
final.append('#')
else:
final.append(' ')
real.append(''.join(final))
return real
range(n-1,-1,-1)는 reversed(range())로 대체할 수 있다
def solution(n, arr1, arr2):
answer = []
for i,j in zip(arr1,arr2):
a12 = str(bin(i|j)[2:])
a12=a12.rjust(n,'0')
a12=a12.replace('1','#')
a12=a12.replace('0',' ')
answer.append(a12)
return answer
0b이진법
이렇게 나와서 인덱스 2부터 슬라이싱하면 이진법 숫자만 나옴작은 수일 경우 5자리가 모두 채워지지 않을 수도 있기때문에 rjust로 왼쪽에 생기는 빈칸만큼 0을 채우고 이후에 replace로 1은 #으로 0은 공백으로 바꿔준다
replace를 쓰면 한 번의 순회만으로도 가능한 '#', ' '로의 변환을 두 번하게 만듭니다. 그리고 zip을 쓰면 쓸데없는 공간을 더욱 차지하게 됩니다.
replace 대신 하나의 for문을, zip 대신 range(n)을 사용하는 게 더욱 효율적인 풀이입니다
❓for문으로 string 요소를 어떻게 바꾸지??
- 인덱스로 접근하려고 하면 string은 item assignment가 안된다고하고
- 요소자체로 접근하면 에러는 안나지만 변경된 값이 반영이 안되고
- 결국 리스트로 바꿔서 인덱스로 접근해서 바꿔줬는데 이러면 이게 더 나은 방법이 아닌 것 같은데 어떻게 하는 걸까
시간도 공간도 이게 더 복잡도가 높음- 여기 나온 테스트케이스 한정일 수도 있지만 꼭 저렇게 코멘트 한 게 정답이라고 보장할 수 도 없는 것 같다 range로 바꾼 게 메모리를 더 많이 잡아먹음
import re
def solution(n, arr1, arr2):
answer = ["#"]*n # 길이의 배열을 먼저 만들어두고
for i in range(n):
answer[i] = str(bin(arr1[i]|arr2[i]))[2:]
answer[i] = re.sub('1', '#', answer[i].zfill(n))
answer[i] = re.sub('0', ' ', answer[i])
return answer
❓이상하게 range(0,n)이 range(n)보다 더 빠르다 진짜 몇번을 해봐도 똑같다 왜그럴까??? ❓