데이터사이언스 기록기📚

[프로그래머스] Level 1_[1차] 비밀지도 본문

Coding Test/프로그래머스(Python)

[프로그래머스] Level 1_[1차] 비밀지도

syunze 2022. 7. 14. 17:18

문제 유형

2018 KAKAO BLIND RECRUITMENT

 

문제

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

 

프로그래머스

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

programmers.co.kr

 

나의 문제풀이

 -  십진법 -> 이진법 : format(해당 숫자, 'b')

 

[Algorithm/Python] 파이썬 2진수 변환 다양한 풀이 (Convert decimal to binary in python)

문제 양의 정수 n이 주어졌을 때, 이를 이진수로 변환하기 풀이 2진수 변환 함수 사용 ⭕️ binaryNum = format(n, 'b') return binaryNum format 이라는 함수를 이용한다. 'b' 는 2진수를 뜻한다. binaryNum = bi..

minnit-develop.tistory.com

 - 자리 수 n과 리스트 안 숫자 개수 맞추기(앞에 '0' 넣기)

 -  문자열 변경 함수인 replace 사용

  • 변경된 값 변수에 넣어주기
def solution(n, arr1, arr2):
    answer = []
    arr1_to_binary = []
    arr2_to_binary = []
    
    # arr1,arr2 이진법으로 바꾸기(int로 바꿔야지만 자리수 덧셈 가능)
    for num1 in arr1:
        arr1_to_binary.append(int(format(num1,'b')))
        
    for num2 in arr2:
        arr2_to_binary.append(int(format(num2, 'b')))
        
    # 추후 문자열 함수(replace)이용하기 위해 str로 변경
    for i in range(len(arr1_to_binary)):
        answer.append(str(arr1_to_binary[i] + arr2_to_binary[i]))
      
    # 자리 수와 다른 경우, 앞에 0 추가 후 replace이용하여 #, 으로 변경
    for i in range(len(answer)):
        if len(answer[i]) < n:
            answer[i] = "0" * (n - len(answer[i])) + answer[i]
        for j in range(n):
            answer[j] = answer[j].replace("0"," ")
            answer[j] = answer[j].replace("1","#")
            answer[j] = answer[j].replace("2","#")
        
    return answer

 

다른 사람들의 문제풀이

 1. rjust 사용

 - rjust : 오른쪽으로 정렬 후 공백을 메워줄 문자를 넣어준다.

 

파이썬 rjust, ljust, zfill

rjust 오른쪽으로 정렬하도록 도와준다. rjust를 통해 공백의 수, 공백을 메워줄 문자를 넣어준다. val = "77".rjust(5, "0") print(val) val = "77777".rjust(5, "0") print(val) val = "123".rjust(5, "a") prin..

www.crocus.co.kr

 - bin(i|j) : 이진수로 바꾸는 함수에서 |(or)을 이용하여 둘 중 1이 있으면 1로 반환

 - replace : 문자 하나하나로 접근하지 않고 문자열 전체에 대해서 사용 가능

def solution(n, arr1, arr2):
    answer = []
    for i,j in zip(arr1,arr2):
        # str(bin(i|j)[2:])에서 [2:]는 0b 없애기 위한 것
        a12 = str(bin(i|j)[2:])
        a12=a12.rjust(n,'0')
        a12=a12.replace('1','#')
        a12=a12.replace('0',' ')
        answer.append(a12)
    return answer

 

2. zfill 이용

- zfill : 0을 왼쪽에 채워주는 역할

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))])

 

3. 정규식 사용

- re.sub(pattern, new_text, text) : text에서 pattern에 맞는 부분을 new_text로 대체

 

Python re : sub

re는 regular expression의 약자로 정규표현식을 의미합니다. Python의 re library에는 sub이라는 method가 있는데 이것은 어떠한 패턴을 내가 원하는 방식으로 대체해줍니다. 일반적인 replace 함수는 단지 어

cosmosproject.tistory.com

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

 

리뷰

 - 십진법 -> 이진법

  • format(변경 숫자, 'b') 
  • bin(변경할 숫자)

 - 오른쪽 빈칸 채우기 

  • zfill
  • rjust(해당 숫자, 넣을 숫자)

 - replace : 문자열 전체 중 바꿀 문자만 지정!

728x90
Comments