/ 제출 1 /
def solution(n, arr1, arr2):
answer = []
for a,b in zip(arr1, arr2):
col = ''
bin_row = bin(a|b)[2:]
if len(bin_row) < n:
row = '0' * (n - len(bin_row))
bin_row = row+bin_row
bin_row = bin_row.replace('1','#')
bin_row = bin_row.replace('0',' ')
answer.append(bin_row)
return answer
채점 결과
정확성: 100.0
합계: 100.0 / 100
비트 연산 문제 만나고 싶었던 문제였는데 ! 바로 나와서 재밌게 풀었습니다.
재밌던 것에 비해 시간은 조금 걸린 느낌입니다. 왜? 잘 모르니까.
그래도 어찌어찌 깔끔하게 잘 풀었습니다.
헤매다가 다행히도 길을 잘 찾았네요.
일단 정리할 것
1. 파이썬 비트 연산
https://dojang.io/mod/page/view.php?id=2460
10진법 정수를 바로 bin()으로 비트연산 가능합니다.
bin(정수)는 10진법 수(정수)를 2진수로 변환합니다. + 또한 bin(내부) 내부에서 비트연산도 가능합니다.
참고로 한 번 더 되짚자면 int( 2진문자열, 2) 이면 2진수를 10진수로 변환 가능합니다.
2. 문자열.replace( a, b ) : 문자열의 a캐릭터를 b로 바꿔줍니다.
3. 문자열 곱셈 갑자기 긴가민가 머리 엉켰는데, 정리하자면 문자열에 숫자 곱하면 해당 문자열 반복해서 길어집니다.
/ 다른 분들 풀이 /
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
1.
와 , 정말 고민했던 문자열 패딩을 rjust라는 메서드로 깔끔히 구현하셨습니다.
메서드 구현방식이나 작동원리를 아는 것도 중요합니다. 하지만, 이런 방법도 알고 있으면 시간 부족한 상황에서는 참 도움이 될 것 같아 익히고 갑니다.
문자열.rjust(길이, 패딩값)
문자열을 길이만큼 왼쪽에서 패딩값을 채워줍니다.
문자열.ljust(길이, 패딩값)
문자열을 길이만큼 오른쪽에서 패딩값을 채워줍니다. ( 혹시 몰라서 그냥 r을 l로 바꿔봤는데 위와 같이 작동하네요:-) )
2.
0b 접두어는 어떻게 해야할 지 몰라서 배열 슬라이싱으로 구현했는데 다른 분들도 비슷하게 구현하셨습니다.
혹시 더 유용한 방법을 없을까 검색해봤습니다.
4. Removing “0b” prefix
To remove the prefixed “0b” string, use array slicing on the string.
그냥 슬라이싱으로 하는 것이 정석인가봅니다.
'CodingTest > Programmers' 카테고리의 다른 글
[ 프로그래머스 ] 나누어 떨어지는 숫자 배열 (0) | 2022.06.23 |
---|---|
[ 프로그래머스 ] 가운데 글자 가져오기 (0) | 2022.06.23 |
[ 프로그래머스 ] 부족한 금액 계산하기 (0) | 2022.06.23 |
[ 프로그래머스 ] 나머지가 1이 되는 수 찾기 (0) | 2022.06.23 |
[ 프로그래머스 ] 최소직사각형 (0) | 2022.06.23 |