본문 바로가기
🔅코딩테스트 공부🔅/❗프로그래머스(Lv.1)

[프로그래머스] Level1 비밀지도(with python)

by 윤무무 2023. 2. 7.

https://school.programmers.co.kr/learn/courses/30/lessons/17681

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

1. 내가 작성한 코드
def solution(n, arr1, arr2):
    
    new3 = []
    new4 = []
    
    for i in arr1:
        new = list(bin(i)[2:]) #지도1 이진수 
        for i in range((n-len(new))):
            new.insert(0,'0')
        new3.append(new)
        
    for i in arr2:
        new2 = list(bin(i)[2:]) #지도2 이진수 
        for i in range((n-len(new2))):
            new2.insert(0,'0')
        new4.append(new2)
            
    answer = []
    
    for j in range(n):
        c = ''
        for k in range(n):
            if (new3[j][k] == '1') or (new4[j][k] == '1'):
                c += "#"
            else:
                c += ' '
        answer.append(c)

    return answer

 

1. bin 함수를 사용하면 앞에 0b가 붙어서 나오기 때문에 슬라이딩을 이용해서 제거해줬다.

 

ex) print(bin(9)) #0b1001 => 1001

 

2. n의 크기에 맞게 수를 조정하기 위해 insert 0으로 모자란 수만큼 0을 삽입해줬다.

 

3. 두 list를 비교해서 둘 중 하나라도 1이면 #을, 둘 다 공백이면 ' '을 삽입해줬다.

 

 

2. 비트연산자를 이용한 코드
def solution(n, arr1, arr2):
    answer = []
    
    for i, j in zip(arr1, arr2):
        new = str(bin(i|j)[2:])
        new = new.rjust(n,'0')
        new = new.replace('1','#')
        new = new.replace('0',' ')
        answer.append(new)
        
    return answer

 

1. zip 함수를 통해 arr1과 arr2의 원소를 묶어준다.

 

2. i와 j를 비트연산자를 이용해 이진수를 바꿔준 후 슬라이딩을 이용해 0b를 없애준다.

 

3. rjust로 오른쪽 정렬해준 후 모자란 부분은 0을 넣는다.

 

4. 1과 0을 각각 #과 공백으로 교체한다.

 

 

3. 알게된 점
  • 문자열.rjust(전체 자리 숫자, 공백이 있을 경우 공백을 채울 텍스트) + ljust도 가능 # 문자열에서 사용 가능
  • zip 함수를 통해 다른 list에서 원소를 가지고 올 수 있음  #iterable한 객체에서 사용 가능
  • replace 활용하기 ! 

댓글