문제
https://school.programmers.co.kr/learn/courses/30/lessons/17681
사용 언어
Python3
풀이 과정
삼성 SW 아카데미에서 (거의 유일하게 학습한) 비트 연산 문제였다!
or 연산을 하면 되겠다는건 알았는데 파이썬에서 2진수 다루는 방법을 잘 몰라 검색해서 해결했다.
그리고 아래 첫 번째 제출 코드에서 겹치는 부분이 마음에 들지 않아 한 번만 쓰도록 if문을 변경했다.
def solution(n, arr1, arr2):
answer = []
for i in range(n):
wall = bin(arr1[i] | arr2[i])[2:]
# print(wall)
if len(wall) == n:
wall = wall.replace("0", " ")
wall = wall.replace("1", "#")
answer.append(wall)
else:
wall = "0" * (n - len(wall)) + wall
wall = wall.replace("0", " ")
wall = wall.replace("1", "#")
answer.append(wall)
return answer
통과! 간단해서 시간이 모두 0.01ms로 똑같았다.
제출 답안
def solution(n, arr1, arr2):
answer = []
for i in range(n):
wall = bin(arr1[i] | arr2[i])[2:]
# print(wall)
if len(wall) != n:
wall = "0" * (n - len(wall)) + wall
wall = wall.replace("0", " ")
wall = wall.replace("1", "#")
answer.append(wall)
return answer
공부한 내용
bin
파이썬은 내장 함수로 2진수 변환 함수 bin을 사용할 수 있다.
wall = bin(arr1[i] | arr2[i])[2:]
나는 처음에 둘 다 변환해서 or 연산을 수행하려고 했는데, 비트 연산은 어차피 2진수로 계산되기 때문에 변환한 값에만 bin을 사용했다.
그리고 bin 함수의 반환값에는 0b가 붙기 때문에 숫자만 사용하기 위해 슬라이싱을 해주었다.
이외에도 8진수 변환 함수 oct()와 16진수 변환 함수 hex()가 있고 각각 0o와 0x가 붙는다.
a = "song"
b = "hee"
print(f"{a}{b}") # songhee
출처: https://www.daleseo.com/python-int-bases/
'코딩 테스트 스터디 > 프로그래머스' 카테고리의 다른 글
[level 2] 양궁대회 (0) | 2022.08.10 |
---|---|
[level 2] 주차 요금 계산 (0) | 2022.08.01 |
[level 3] N으로 표현 (0) | 2022.07.24 |
[level 3] 네트워크 (0) | 2022.07.23 |
[level 2] 게임 맵 최단거리 (0) | 2022.07.22 |