본문 바로가기
Algorithm/구현

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

by HANNI하니 2023. 5. 30.

사용 언어 - Python3

문제 - [1차] 비밀 지도

 

프로그래머스

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

programmers.co.kr

 

 

 

정답

bin 사용해서 이진법 변환 (정답 맞춘 여부 X)

bin을 까먹고 무식하게 나누기/몫 으로 2진법 변환했더니, 테스트3에서 실패

def solution(n, arr1, arr2):
    # arr1 이진법으로 바꾸기
    new1 = []
    for i in arr1:
        a = ''
        while i > 1:
            a += str(i%2) #나머지
            i = i//2 # 몫
        a += str(1)
        if len(a) < n:
            while len(a) < n:
                a += str(0)
        new1.append(a[::-1])
    
    # arr2 이진법으로 바꾸기
    new2 = []
    for j in arr2:
        b = ''
        while j > 1:
            b += str(j%2) #나머지
            j = j//2 # 몫
        b += str(1)
        if len(b) < n:
            while len(b) < n:
                b += str(0)
        new2.append(b[::-1])
    
    # 암호 해독
    answer = []
    for i in range(n):
        c = ''
        for j in range(n):
            if new1[i][j] == new2[i][j] and new1[i][j] == str(0):
                c += ' '
            else:
                c += '#'
        answer.append(c)

    return answer

 

bin을 사용하기!

bin(10진법) = 0b2진법

bin(arr1[i])[2:]

길이가 n보다 작다면, 앞을 0으로 채워줘야 한다.

def solution(n, arr1, arr2):
    answer = []
    new1 = []
    new2 = []
    
    # bin 함수로 이진법으로 바꾸기
    for i in range(n):
        # 앞의 '0b' 없애주기 [2:]
        new1.append(bin(arr1[i])[2:])
        new2.append(bin(arr2[i])[2:])
        # 0으로 길이 n개 채워주기
        new1[i] = ('0'*(n-len(new1[i]))) + new1[i]
        new2[i] = ('0'*(n-len(new2[i]))) + new2[i]

    # 암호 해독
    answer = []
    for i in range(n):
        c = ''
        for j in range(n):
            if new1[i][j] == '0' and new2[i][j] == '0':
                c += ' '
            elif new1[i][j] == '1' or new2[i][j] == '1':
                c += '#'
        answer.append(c)

    return answer

 

 

 

레퍼런스

  • 2진수, 8진수, 16진수 내장함수

2진수 = bin(10진수)[2:]

8진수 = oct(10진수)[2:]

16진수 = hex(10진수)[2:]

int('0b1001',2) = 9

int('0o11',8) = 8+1 = 9

int('0x110',16) = 16**2 + 16 + 0 = 272

format(9,'b') = '0b1001'

  • 정답 깃허브
 

GitHub - yyeongeun/codingtest: 코딩테스트 공부

코딩테스트 공부. Contribute to yyeongeun/codingtest development by creating an account on GitHub.

github.com

 

댓글