[프로그래머스_Lv1] 2018 KAKAO BLIND RECRUITMENT >[1차] 비밀지도

ybk·2025년 2월 24일
0

프로그래머스

목록 보기
245/245

Lv.1) [1차] 비밀지도


문제 설명 📝


입출력 예시 📌

매개변수
n5
arr1[9, 20, 28, 18, 11]
arr2[30, 1, 21, 17, 28]
출력["#####", "# # #", "### #", "# ##", "#####"]

매개변수
n6
arr1[46, 33, 33, 22, 31, 50]
arr2[27, 56, 19, 14, 14, 10]
출력["######", "### #", "## ##", " #### ", " #####", "### # "]

코드 풀이 💡

def solution(n, arr1, arr2):
    arr1_2=[]
    arr2_2=[]

    #이진법 함수
    def binary(a, n):
        ternary = ""
        while a > 0:
            a, remaider = divmod(a, 2)
            ternary += str(remaider)
        return ternary[::-1].zfill(n)

# arr1_2 = [bin(i)[2:].zfill(5) for i in arr1]
# arr2_2 = [bin(i)[2:].zfill(5) for i in arr2]

    # 1. 이진법으로 변경
    for i in arr1:
        arr1_2.append(binary(i, n))
    for i in arr2:
        arr2_2.append(binary(i, n))

    # 2. arr1과 arr2를 합하기
    sums = []
    for i in range(len(arr1_2)):
        sums.append("".join("1" if a == "1" or b == "1" else "0" for a, b in zip(arr1_2[i], arr2_2[i])))


    # 2. 0은 공백, 1이상은 #으로 변경
    answer = []
    st = ""
    for i in sums:
        st = ""  # 문자열 초기화
        for j in i:
            st += "#" if j != "0" else " "  
        answer.append(st)
    return answer

🔍 코드 설명

  • zfil() : 0을 왼쪽에 채워줍니다.
  • bin() : 전달받은 숫자를 이진수 문자열로 돌려준다. ex) "Ox0001" => bin(n)[2:] = "0001"

다른 사람의 풀이 ✨

def solution(n, arr1, arr2):
    answer = []
    for i,j in zip(arr1,arr2):
        a12 = str(bin(i|j)[2:]) #arr1과 arr2를 합쳐 이진법으로 변경
        a12=a12.rjust(n,'0') 
        a12=a12.replace('1','#')
        a12=a12.replace('0',' ')
        answer.append(a12)
    return answer

✅ 다른 풀이의 특징

  • bin(i|j) : 비트 OR 연산으로 두 숫자의 이진수를 합칩니다.
  • rjust(총 길이, "공백을 메워줄 문자") : 오른쪽으로 정렬하도록 하며 공백의 수, 공백을 메워줄 문자를 넣어줍니다.

🔗 프로그래머스 문제 링크

profile
개발자 준비생~

0개의 댓글

관련 채용 정보