파이썬, 자바스크립트_카카오 Lv.1 - [1차] 비밀지도

naughty _deer·2022년 4월 28일
0

코딩테스트

목록 보기
4/7

ref: https://programmers.co.kr/learn/courses/30/lessons/72410

문제 요약

한 변의 길이가 n인 정사각형 배열 형태
각 칸은 "공백"(" ") 또는 "벽"("#")
지도 1 또는 지도 2 중 어느 하나라도 벽인 부분은 전체 지도에서도 벽
모두 공백인 부분은 전체 지도에서도 공백

제한

1 ≦ n ≦ 16

풀기 전 생각

2진수 변환 내장함수, 2차원 리스트, 집합 연산?
리스트가 최대 16**2이기 때문에 시간복잡도 걱정할 필요가 없다.

풀이 계획

  1. arr1을 돌면서 2진수 변환하고 graph1에 넣기
  2. arr2을 돌면서 2진수 변환하고 graph2에 넣기
  3. 인덱스 값으로 2차원 리스트 돌면서 합쳐주기
  4. answer 선언하고, 더한 2차원 리스트 돌면서
    0이면 공백, 0이 아니면 #넣기

풀이 코드

Python

def solution(n, arr1, arr2):
  graph1 = []
  for i in arr1:
    binary_value = bin(i)[2:].rjust(n,'0')
    graph1.append(list(binary_value))

  graph2 = []
  for i in arr2:
    binary_value = bin(i)[2:].rjust(n,'0')
    graph2.append(list(binary_value))
  
  for i in range(n):
    for j in range(n):
      graph1[i][j] = int(graph1[i][j]) + int(graph2[i][j])

  answer = []
  for i in graph1:
    tmp = ''
    for j in i:
      if j == 0:
        tmp += ' '
      else:
        tmp += '#'
    answer.append(tmp)

  return answer

커뮤니티

def solution(n, arr1, arr2):
    answer = []
    for i,j in zip(arr1,arr2):
        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으로 감싸는 것.
충분히 알고 있었는데 생각해내지 못했다.

replace는 수행시간이 오래 걸릴 가능성이 있어서 최대한 안쓰려고 한다.
그러나 이번 문제는 n이 최대 16이니까 시간 걱정할 일이 없다.

Javascript

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

  for(let i=0; i<n; i++){
    const tmpArray1 = arr1[i].toString(2).padStart(n,'0').split('');
    const tmpArray2 = arr2[i].toString(2).padStart(n,'0').split('');

    let mergedString = '';
    for(let j=0; j<n; j++){
      const mergedValue = parseInt(tmpArray1[j]) + parseInt(tmpArray2[j]);
      if (mergedValue === 0){
        mergedString += ' ';
      } else{
        mergedString += '#';
      }
    }
    answer.push(mergedString);
  }
  return answer;
}
profile
개발자로 취업하기

0개의 댓글