본문 바로가기

Algorithm

[프로그래머스] 비밀지도 with Python


비밀지도(LEVEL 1)

2018 KAKAO BLIND RECRUITMENT

문제보기(프로그래머스)

 

내가 제출한 답안

def solution(n, arr1, arr2):
    answer = []

    for i in range(n):
        arr1[i] = list(format(arr1[i], 'b'))
        arr2[i] = list(format(arr2[i], 'b'))

        while len(arr1[i]) < n:
            arr1[i].insert(0, 0)
        while len(arr2[i]) < n:
            arr2[i].insert(0, 0)

        for j in range(n):
            if int(arr1[i][j]) != int(arr2[i][j]):
                arr1[i][j] = 1

        a = ''        
        for k in range(n):
            if int(arr1[i][k]) > 0:
                a += '#'
            else:
                a += ' '
        answer.append(a)

    return answer

나의 풀이

  • for 반복문을 활용하여 지도의 상단 기준으로 i번째부터 arr1, arr2 내부 값들을 바꿔준다.
  • arr1, arr2 내에 정수 값들을 이진수 형태로 전환(format)
  • '#' 형태로 전환하기 위한 사전작업
    • while 반복문을 활용하여 arr1, arr2 내부 값이 지도의 한 변 크기(n)보다 작은 값이 있는지 확인
      • 값이 작다면 n보다 커질때까지 0 값을 삽입(insert)
    • for 반복문을 추가로 활용하여 arr1, arr2 지도 값을 arr1로 합쳐준다.
      • 값이 다르면 1로 변환
  • 합쳐진 arr1 지도 값을 각 층마다 확인하면서 '#'형태로 전환
    • 값이 정수 1이면 '#'을, 0이면 공백 값을 임시 공간 a에 각 층마다 옮긴다.
    • 한 줄 모이게 되면 answer에 이전
  • i 값이 n-1번째까지 반복을 마치면 각 층마다 모은 answer을 반환

파이썬 관련 학습내용

  • format 함수
    • 문자열을 다양한 형태로 변환시켜주는 함수
    • 여기서는 정수 값을 2진수로 전환시켜주는 기능 활용
    • 형태 : format(n, 'type')
    • n : 10진수 정수 값
    • type : 2진수 → 'b', 8진수 → 'o', 16진수 → 'x'
    • ex) (입력) format(9, 'b'), (출력) '1001'
  • insert 함수
    • 리스트에 요소를 삽입하고 싶을 때 사용하는 함수
    • 형태 : list.insert(i, n)
    • list의 i번째에 n을 삽입한다.
    • ex)
a = [1, 0, 0, 1]
a.insert(0, 0) # 리스트 a의 0번째에 0 값을 삽입한다.

print(a) # 출력값 : [0, 1, 0, 0, 1]