PS (Problem Solving)/Programmers

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

캐럿노트 2022. 8. 18. 19:00

문제

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

 

프로그래머스

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

programmers.co.kr

 

설계

- bin 함수를 유용하게 사용했다.

- map1과 map2를 생성하는 코드가 같아 하나로 묶고 싶었다.

# 처음 제출 코드

def solution(n, arr1, arr2):
    map1, map2 = [], []
    # map1 생성
    for i in range(n):
        data = list(bin(arr1[i]))       # ex) 0b10100
        data.pop(0)     # 앞에 수식어 2개 제거
        data.pop(0)
        for x in range(len(data)):
            data[x] = int(data[x])
        while len(data) < n:
            data.insert(0, 0)       # 0번째 index에 0 추가
        map1.append(data)

    # map2 생성
    for i in range(n):
        data = list(bin(arr2[i]))       # ex) 0b10100
        data.pop(0)     # 앞에 수식어 2개 제거
        data.pop(0)
        for x in range(len(data)):
            data[x] = int(data[x])
        while len(data) < n:
            data.insert(0, 0)       # 0번째 index에 0 추가
        map2.append(data)

    # map1, map2 대조
    answer = []
    for i in range(n):
        bucket = []
        for j in range(n):
            if map1[i][j] or map2[i][j]:
                bucket.append('#')
            else:
                bucket.append(' ')
        bucket = ''.join(bucket)
        answer.append(bucket)
    return answer

 

- 아래와 같이 따로 함수를 만들어 리팩토링했다.

def createMap(map, arr, n):
    for i in range(n):
        data = list(bin(arr[i]))       # ex) 0b10100
        data.pop(0)     # 앞에 수식어 2개 제거
        data.pop(0)
        for x in range(len(data)):
            data[x] = int(data[x])
        while len(data) < n:
            data.insert(0, 0)       # 0번째 index에 0 추가
        map.append(data)
    return map

def solution(n, arr1, arr2):
    map1, map2 = [], []
    map1 = createMap(map1, arr1, n)    # map1 생성
    map2 = createMap(map2, arr2, n)    # map2 생성

    # map1, map2 대조
    answer = []
    for i in range(n):
        bucket = []
        for j in range(n):
            if map1[i][j] or map2[i][j]:
                bucket.append('#')
            else:
                bucket.append(' ')
        bucket = ''.join(bucket)
        answer.append(bucket)
    return answer