프로그래머스_1차 비밀지도

임정민·2023년 11월 15일
0

알고리즘 문제풀이

목록 보기
124/173
post-thumbnail

프로그래머스 Lv1 문제입니다. 실전에 대비하기 위해 30분 시간제한을 두고 풀었습니다.

문제

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

[나의 풀이]

⌛ 시간 초과 (후 구현)


import re
from collections import deque

def get_format(bin_str,n):
    
    bin_str = deque(bin_str)

    while len(bin_str)!=n:
        bin_str.appendleft("0") 
    return "".join(bin_str)

def solution(n, arr1, arr2):
    
    answer = []
    
    for i in range(n):

        x = deque(bin(arr1[i]|arr2[i])[2:])
    
        while len(x) != n:
            x.appendleft("0")
        
        x = "".join(x)
        x = re.sub('1','#',x)
        x = re.sub('0',' ',x) 
        
        answer.append(x)
    return answer

문제 정의와 구현 방법은 생각이 났지만 조금 더 간결한 코드로 구현하기 위해 고민하다 시간을 초과한 문제였습니다. 입력된 숫자값을 bin()로 변환하고 비트연산하여 두 개의 지도 겹치는 부분을 구현하고 반환 형식에 맞게 문자열 크기를 고정시킨 풀이입니다.🐰🐰🐰

조금 더 간결한 풀이가 없을까 하여 다른 사람의 풀이를 찾아보았습니다.

[다른 사람의 풀이1]


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()라는 함수로 처리한 모습입니다.

예를 들어


text = "안녕하세요"
width = 10
result = text.rjust(width,' ')

print(result)

일때 ' 안녕하세요'와 같이 문자열 크기를 고정되어 '나의 풀이'get_format(bin_str,n)보다 간단한 표현 방식이었습니다.

[다른 사람의 풀이2]


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

rjust() 함수를 사용하지 않고 정규식으로 표현한 간단한 풀이입니다. 고정된 길이보다 부족한 만 큼 '0'을 추가하는 방식으로 '나의 풀이'에서 구현하고 싶어 오래 고민했던 방식입니다.🐳🐳🐳

감사합니다.

profile
https://github.com/min731

0개의 댓글