본문 바로가기
코딩 테스트/프로그래머스

[프로그래머스 - Python/JavaScript] Lv.1 비밀지도

by 오엥?은 2023. 2. 7.
반응형
  • 문제

https://school.programmers.co.kr/learn/courses/30/lessons/17681?language=python3 

 

프로그래머스

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

programmers.co.kr

 

  • 풀이

- Python

def solution(n, arr1, arr2):

    a1 = [int(bin(x)[2:]) for x in arr1]
    b1 = [int(bin(x)[2:]) for x in arr2]
    c1 = [a1[x] + b1[x] for x in range(0, n)]

    c2 = []
    for x in c1:
        if len(str(x)) != n:
            blank = '0' * (n - len(str(x))) + str(x)
            c2.append(blank)
        else:
            c2.append(str(x))

    sen = ''
    answer = []
    for x in c2:
        for y in x:
            if y == '1' or y == '2':
                sen += '#'
            elif y == '0':
                sen += ' '
            else:
                sen += ''

    sen2 = ''
    count = 0
    for x in sen:
        sen2 += x
        count += 1
        if count % n == 0:
            answer.append(sen2)
            sen2 = ''

    return answer
bin(x)
bin(x)[2:]

1번은 십진수 x를 2진수로 바꾸는 방법

만약 x가 11이면 '0b1101' 가 출력된다.

0b 를 없애서 출력하고 싶으면 2번을 사용하면 된다.

이건 이번에 처음 알았다.

 

 

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

이건 다른사람 풀이

봐라 이렇게 쉬운 문제일 줄 알았다.

 

1. bin(i|j)[2:]
2. bin(3|4)[2:]

 

이건 i와 j를 2진수로 바꿔서 비트 OR연산

2번 결과는 111 이 나온다

 

a12 = '1001'
num = a12.rjust(7, '0')
print(num)  
# 결과 : 0001001

그리고 rjust 이건 별 5만개 쳐야된다. 왜냐면 너무 신기하니깐

<문자열>.rjust(<원하는 문자열 길이>, '<(원하는 문자열 - 문자열) 만큼 채울 문자')

zip 쓰는 것도 생각도 못했다.

replace 도 생각 못했다.

멋있다 진짜 나랑 뇌 바꾸자

 

 

 

 

- JavaScript

function solution(n, arr1, arr2) {
    
    let ar1 = [];
    let ar2 = [];
    let ar3 = [];
    let ar4 = [];
    let temp = '';
    
    for (let i = 0; i < arr1.length; i++) 
        ar1[i] = (parseInt(arr1[i], 10).toString(2)).padStart(n,'0');
    
    for (let i = 0; i < arr2.length; i++) 
        ar2[i] = (parseInt(arr2[i], 10).toString(2)).padStart(n,'0');
    
    for (let i = 0; i < arr2.length; i++) 
        ar3[i] = ((parseInt(ar1[i]) + parseInt(ar2[i]))).toString().padStart(n,'0');

    let count = 0;
    let a = [];
    for (i of ar3) {
        a[count]= i.toString().split('');
        for (let i = 0; i < a[count].length; i++) {
            if (a[count][i] === '0')
                a[count][i] = " ";
            else
                a[count][i] = "#";
        } 
        count++;
    }

    for (let i = 0; i < n; i++) {
        for (let j = 0; j < n; j++) {
            temp += a[i][j];
        }
        ar4[i] = temp;
        temp = '';
    }
    
    return ar4;
    
}

 

 

 
반응형