[알고리즘]기초2-[1차] 비밀지도

sunnwave·2022년 6월 7일
0

알고리즘

목록 보기
30/47
post-thumbnail

[1차] 비밀지도

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

기본 풀이

def solution(n, arr1, arr2):
    answer = []
    arr1_1=[set_binary(n,i) for i in arr1]
    arr2_1=[set_binary(n,i) for i in arr2]
    
    for i in range(len(arr1_1)):
        temp=''
        for j in range(len(arr1_1[i])):
            if arr1_1[i][j]=='1' or arr2_1[i][j]=='1':
                temp+='1'
            elif arr1_1[i][j]=='0' and arr2_1[i][j]=='0':
                temp+='0'
        temp=temp.replace('1','#')
        temp=temp.replace('0',' ')
        answer.append(temp)
    
    return answer

def set_binary(n,num):
    binary_num=""
    while(1):
        na=num%2
        binary_num=str(na)+binary_num
        m=num//2
        if m==1 or m==0:
            binary_num=str(m)+binary_num
            break
        num=m
    if n>len(binary_num):
        binary_num="0"*(n-len(binary_num))+binary_num
    return binary_num
  1. 10진수를 이진수로 변환하는 함수 만들기
  • 반복문을 이용해 몫이 1또는 0이 될 때까지 2로 나누기 반복
  • binary_num에 2로 나눈 나머지를 문자열로 붙여넣기
  • 문제에 주어진 자릿수가 더 크다면 binary_num의 앞자리에 0을 붙여준다.

  1. 배열의 십진수를 이진수로 변환 후 각 자릿수 비교
  • set_binary를 이용하여 주어진 배열을 이진수로 변환하기
  • 반복문을 이용하여 arr1과 arr2의 각 자리의 수를 비교하여 1 또는 0을 반환하여 temp에 문자열형태로 붙여넣기
  • replace를 이용하여 1은 '#'으로, 0은 ' '으로 대체

👉🏻 십진수를 이진수로 변환하는 함수를 몰라 직접 만들어야했고 바꾼 이진수의 자릿수를 따로 맞춰주어야 했으므로 코드가 매우 길어짐.

❗ bin()함수를 이용하여 십진수를 이진수로 변환 가능

print(bin(20))      #0b10100
print(bin(20)[2:])  #10100

❗ format(정수,'b')를 이용하여 십진수를 이진수로 변환 가능

 print(format(20,'b'))      #10100
 print(format(20,'#b'))     #0b10100

❗ rjust(자릿수,'대체문자'), ljust(자릿수, '대체문자')를 이용하여 문자열을 한쪽으로 정렬 후 공백을 채움

print('30'.rjust(5,'@'))        #@@@30
print('30'.ljust(5,'@'))        #30@@@

함수 적용 풀이

def solution(n, arr1, arr2):
    answer = []
    arr1_1=[format(i,'b').rjust(n,'0') for i in arr1]
    arr2_1=[format(i,'b').rjust(n,'0') for i in arr2]

    for i,j in zip(arr1_1,arr2_1):
        temp=''
        for a in range(n):   
            temp=temp+('1' if i[a]=='1' or j[a]=='1' else '0')
            
        temp=temp.replace('1','#')
        temp=temp.replace('0',' ')
        answer.append(temp)
    
    return answer

👉🏻format(),rjust(), zip() 이용

  • format(정수, 'b')를 이용하여 주어진 십진수를 이진수로 변환
  • rjust(문자열 길이, 대체문자)를 이용하여 이진수의 자릿수를 맞춰줌
  • zip()을 이용하여 for 문에서 두 리스트의 인자를 동시에 받음
  • replace()를 이용하여 1은 '#'으로, 0은 ' '으로 대체
profile
조구마한 개발 기록 블로그

0개의 댓글

관련 채용 정보