본문 바로가기
개발/Algorithm 문제 풀이

[Python] 카카오 2018 - 비밀 지도

by DenverAlmighty 2020. 8. 18.
반응형

풀이

def solution(n, arr1, arr2):
    answer = []
    for i in range(n):
        bi = bin(arr1[i] | arr2[i])
        tmp = ""
        if len(bi) < n+2:
            tmp += " " * (n+2 - len(bi))
        for b in range(2, len(bi)):
            if bi[b] == '1':
                 tmp += "#"
            elif bi[b] == '0': tmp += " "
        answer.append(tmp)
    return answer

 

다른 사람의 풀이

solution = lambda n, arr1, arr2:(
	[''.join(map(lambda x: '#' 
      if x=='1' else ' ', "{0:b}".format(row).zfill(n))) 
      for row in (a|b for a, b in zip(arr1, arr2))
    ]
)

for i, j in zip(arr1, arr2) 

 

zfill(width) str.zfill(width)

: 앞에 0 채움

0대신 다른 문자열로 채울려면 rjust() 사용해야한다

 

bin(a) == "{0:b}".format(a)

 

 

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

 

rjust() str.rjust(width[, fillchar])

: 문자열을 반환 이전 정렬 오른쪽 길이 폭의 새로운 문자열에 공백이있는 패딩. 길이가 문자열의 길이보다 작다면 원래의 문자열을 반환한다.

zfill 에서는 채울 문자열을 지정할 수 ㅇ

 

import re

def solution(n, arr1, arr2):
    answer = ["#"]*n
    for i in range(0, n):
        answer[i] = str(bin(arr1[i]|arr2[i]))[2:]
        answer[i] = re.sub('1', '#', '0'*(n-len(answer[i]))+answer[i])
        answer[i] = re.sub('0', ' ', answer[i])
    return answer

re.sub() 

  • re.sub('패턴', '바꿀문자열', '문자열')
  • re.sub('패턴', '바꿀문자열', '문자열', 바꿀횟수)

예시 )

re.sub('[0-9]+', 'n', '데구리가 2번 데굴데굴 20번 데굴데굴')

>> 데구리가 n번 데굴데굴 n번 데굴데굴

 

 

  • re.sub('패턴', 교체함수, '문자열', 바꿀횟수)
def multi_ten(m):        
	n = int(m.group())   
    return str(n * 10) 
    
re.sub('[0-9]+', multi_ten, '데구리가 2번 데굴데굴 20번 데굴데굴')

>> '데구리가 20번 데굴데굴 200번 데굴데굴'

 

 

728x90
반응형