[5/21] 비밀 지도

이경준·2021년 5월 22일
0

코테

목록 보기
1/140
post-custom-banner

문제 성공

내가 짠 코드

def solution(n, arr1, arr2):
    answer = [[" "]*n for _ in range(n)]
    
    for i in range(n):
        arr1[i] = ('0'*n + bin(arr1[i])[2:])[-n:]
        arr2[i] = ('0'*n + bin(arr2[i])[2:])[-n:]
    
    for j in range(n):
        for k in range(n):
            if (arr1[j][k] == '1' or arr2[j][k] == '1'):
                answer[j][k] = '#'
    
    for m in range(n):
        answer[m] = "".join(answer[m])
    
    return answer
풀이

1) for문을 사용하여 arr1과 arr2를 2진수로 변환
2) 2중 for문을 사용하여 1인 것은 answer에 동일한 인덱스에 #으로 변경
3) for문을 사용하여 answer 행 원소들을 합침

효율적인 코드

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
피드백
  • 정처기에서 배웠던 비트 연산자를 문제에 적용할 생각을 못했다. 관련 함수를 공부해야겠다.
  • '0'을 넣기 위해 고생해서 비효율적인 코드를 짰는데, rjust() / replace() 같은 효율적인 함수가 존재했다.
  • '#'과 띄어쓰기를 표현하기 위해 2중 for문을 돌렸는데, replace를 사용해서 그냥 바꿔주면 된다.
배운 지식
코드
  • bin() : 정수를 2진수로 변환
  • int(진수, 정수) : n진수를 정수로 변환
  • rjust(n, '채울 문자/숫자') : n 길이에 맞춰서 부족한 부분을 해당 문자로 채움
  • zfill(n) : n 길이에 맞춰서 부족한 부분을 0으로 채움
  • zip(arr1, arr2) : for문 등에서, 여러 개의 배열을 묶어서 쌍으로 사용 가능
기타
  • 비트연산자 함수 (공부 필요!)
  • 'for _ in range(n)' 와 같은 코드에서 는, 숫자에 상관없이 단순하게 횟수의 용도로만 필요할 때 효율성을 위해 사용함
profile
The Show Must Go On
post-custom-banner

0개의 댓글