본문 바로가기
프로그래머스/Python

[프로그래머스] [1차] 비밀지도 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트

by 우당탕탕 개발자 2023. 7. 8.
728x90
반응형

 

 

프로그래머스

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

programmers.co.kr

 

1. 문제 설명

2. 풀이과정

각 정수 배열을 2진수로 변환하고 각 2진수를 각 자리별로 비교하여 하나라도 벽이면 벽으로 구현하니 시간이 초과되었다. 하여 각 정수 배열의 각 원소별로 추출하여 각 자리를 비교하여 하나라도 벽이면 벽으로 저장하고 역순으로 출력한 결과를 저장하도록 구현하였다.

 

  1. 정수 배열의 원소의 개수는 지도의 한 변의 길이와 동일하므로 지도의 한 변의 길이만큼 반복한다. for i in range(n)
  2. 각 변마다 결과를 저장할 리스트를 생성한다. li = list()
  3. 각 배열의 원소를 이진수로 변환했을 때 지도의 한 변의 길이와 동일한 자릿수의 이진수로 구성된다. 따라서 지도의 한 변의 길이만큼 반복한다. for _ in range(n)
  4. 만약 각 배열의 원소를 2로 나눈 나머지를 or 연산으로 비교한 결과가 1이면(두 결과 중 하나라도 1이면) 벽이므로 벽을 추가한다. if ((arr1[i] % 2) or (arr2[i] % 2)): li.append('#')
  5. 반면에 비교한 결과가 0이면 (두 결과 모두 0이면) 공백을 추가한다. else: li.append(' ')
  6. 두 값을 2로 나눈 몫의 결과로 새로 저장한다. arr1[i] //= 2  arr2[i] //= 2
  7. 최종 지도의 결과를 저장한 리스트는 거꾸로 저장되어 있기에 역순으로 바꿔준다. li.reverse()
  8. 정답에 저장할 문자열 변수를 생성하고 초기화한다. String = ''
  9. 지도의 결과를 하나씩 추출하여 문자열에 추가한다. for j in li: String += j
  10. 최종 지도의 각 변의 결과 문자열을 정답에 추가한다. answer.append(String)
반응형

3. 소스코드

def solution(n, arr1, arr2):
    answer = []
    
    for i in range(n):
        li = list()
        for _ in range(n):
            if ((arr1[i] % 2) or (arr2[i] % 2)):
                li.append('#')
            else:
                li.append(' ')

            arr1[i] //= 2
            arr2[i] //= 2
        
        li.reverse()
        
        String = ''
        for j in li:
            String += j
            
        answer.append(String)
        
    return answer
728x90
반응형