포시코딩

[프로그래머스][Lv.0] [1차] 비밀지도 본문

자료구조알고리즘/문제풀이

[프로그래머스][Lv.0] [1차] 비밀지도

포시 2022. 12. 20. 17:11
728x90

문제

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

 

프로그래머스

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

programmers.co.kr

 

내 풀이 - Python

def solution(n, arr1, arr2):
    answer = []
    
    for i in range(n):
        a = int(format(arr1[i], 'b'))
        b = int(format(arr2[i], 'b'))
        c = a + b
        c = str(c).replace('2', '1')
        while len(c) < n:
            c = '0'+c
        c = c.replace('1', '#').replace('0', ' ')
        answer.append(c)
    
    return answer

처음에는 Python에서 십진수를 이진수로 나타내는법을 몰라 직접 함수를 만들었는데

format() 쓸 일이 많을 것 같아 연습삼아 써봤다.

이진수로 바꾼 두 값을 더했을 때 무조건 2 이상은 안되니까 

더한 순간 2를 다 1로 바꾸고 

마지막에 1 -> #, 0 -> 빈칸으로 바꾸는식으로 코드를 줄였다.

 

내 풀이 - Javascript

function solution(n, arr1, arr2) {
    let answer = [];

    arr1 = arr1.map((a)=>tenToTwo(a))
    arr2 = arr2.map((a)=>tenToTwo(a))

    for(let x=0;x<n;x++){
        let sum = parseInt(arr1[x]) + parseInt(arr2[x]);
        sum = sum.toString().padStart(n, '0').replace(/[2]/g, '1');
        sum = sum.replace(/[1]/g, '#').replace(/[0]/g, ' ');
        answer.push(sum);
    }

    function tenToTwo(target){
        let result = '';
        let temp = 0;
        let remainder = 0;
        while(true){
            remainder = target % 2;
            result = remainder + result;
            temp = target-remainder;
            if(temp == 0){
                if(result.length != n){
                    result = result.padStart(n, '0');
                }
                return result;
            } else {
                target = temp / 2;
            }
        }
    }

    return answer;
}

예전에 푼 코드인데 여기선 이진수 만드는 함수를 직접 짜 풀었다 ㅋㅋ..

js에선 더 쉽게 이진수 만들 수 있는데 이땐 몰랐던거 같다.

또 padStart() 함수를 쓰고 있는데 

파이썬에선 빈 자리를 while문 돌려서 0으로 채워줬다면 js에선 padStart로 채우는 모습을 볼 수 있다.

* (추가) Javascript의 padStart()를 Python에서는 rjust()로 똑같이 사용할 수 있다 - [링크]

 

다른 풀이

def solution(n, arr1, arr2):
    answer = []
    for i,j in zip(arr1,arr2):
        print(i, j)
        a12 = str(bin(i|j)[2:])
        a12=a12.rjust(n,'0')
        a12=a12.replace('1','#')
        a12=a12.replace('0',' ')
        answer.append(a12)
    return answer

처음보는 함수들이 나온다.

zip(), rjust().. 따로 공부해봤다.

거기에 str(bin(i|j)[2:])로 쓰는 방식이며(비트연산자) 아직도 배울게 많다는걸 생각하게 한다.

728x90