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

일단 해볼게·2023년 10월 11일
0

프로그래머스

목록 보기
76/106

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

정답 코드

def solution(n, arr1, arr2):
    secret_map = ['0' * n for _ in range(n)]
    
    for i in range(len(arr1)):
        # 2진수로 변환
        arr1_two = bin(arr1[i])[2:]
        arr2_two = bin(arr2[i])[2:]
        
        # 2진수 길이 맞추기
        if n > len(arr1_two):
            arr1_two = (n - len(arr1_two)) * "0" + arr1_two

        if n > len(arr2_two):
            arr2_two = (n - len(arr2_two)) * "0" + arr2_two
       
        # 비밀지도 해독 # or 공백
        for j in range(len(secret_map[i])):
            if arr1_two[j] == "0" and arr2_two[j] == "0":
                secret_map[i] = secret_map[i][:j] + " " + secret_map[i][j + 1:]
            else:
                secret_map[i] = secret_map[i][:j] + "#" + secret_map[i][j + 1:]
                
    return secret_map

시간 초과 코드

def to_two(n):
    t = ""
    
    while n != 1:
        t += str(n % 2)
        n = n // 2
    
    t += str(n)
    
    t = t[::-1]

    return t
        

def solution(n, arr1, arr2):
    secret_map = ['0' * n for _ in range(n)]
    
    for i in range(len(arr1)):
        # 2진수로 변환
        arr1_two = to_two(arr1[i])
        arr2_two = to_two(arr2[i])
        
        # 2진수 길이 맞추기
        if n > len(arr1_two):
            arr1_two = (n - len(arr1_two)) * "0" + arr1_two

        if n > len(arr2_two):
            arr2_two = (n - len(arr2_two)) * "0" + arr2_two
       
     
        # 비밀지도 해독 # or 공백
        for j in range(len(secret_map[i])):
            if arr1_two[j] == "0" and arr2_two[j] == "0":
                secret_map[i] = secret_map[i][:j] + " " + secret_map[i][j + 1:]
            else:
                secret_map[i] = secret_map[i][:j] + "#" + secret_map[i][j + 1:]
                
    return secret_map

이진수로 변환하는 로직을 바꾸니 시간초과가 해결되었다.(테스트 케이스 1, 3번)
while문 사용을 지양해야겠다.

profile
시도하고 More Do하는 백엔드 개발자입니다.

0개의 댓글