문제 설명
비밀지도네오는 평소 프로도가 비상금을 숨겨놓는 장소를 알려줄 비밀지도를 손에 넣었다. 그런데 이 비밀지도는 숫자로 암호화되어 있어 위치를 확인하기 위해서는 암호를 해독해야 한다. 다행히 지도 암호를 해독할 방법을 적어놓은 메모도 함께 발견했다.지도는 한 변의 길이가 n인 정사각형 배열 형태로, 각 칸은 "공백"(" ") 또는 "벽"("#") 두 종류로 이루어져 있다.전체 지도는 두 장의 지도를 겹쳐서 얻을 수 있다. 각각 "지도 1"과 "지도 2"라고 하자. 지도 1 또는 지도 2 중 어느 하나라도 벽인 부분은 전체 지도에서도 벽이다. 지도 1과 지도 2에서 모두 공백인 부분은 전체 지도에서도 공백이다."지도 1"과 "지도 2"는 각각 정수 배열로 암호화되어 있다.암호화된 배열은 지도의 각 가로줄에서 벽 부분을 1, 공백 부분을 0으로 부호화했을 때 얻어지는 이진수에 해당하는 값의 배열이다.
입력 형식
입력으로 지도의 한 변 크기 n 과 2개의 정수 배열 arr1, arr2가 들어온다.
1 ≦ n ≦ 16arr1, arr2는 길이 n인 정수 배열로 주어진다.정수 배열의 각 원소 x를 이진수로 변환했을 때의 길이는 n 이하이다. 즉, 0 ≦ x ≦ 2n - 1을 만족한다.
출력 형식
원래의 비밀지도를 해독하여 '#', 공백으로 구성된 문자열 배열로 출력하라.
해설
문제를 풀려다가 4중 for문이 만들어져서 이건 아니다 싶어 다른 사람의 풀이를 참고했다.
우선 for문을 만드는데, 공통 부분을 집어넣는다.
arr1, arr2 for문 돌려야하니까 1개의 for문에서 작업한다.
arr1_bin이라는 빈 리스트를 만들고 거기에 binary시킨 요소를 ob 부분을 슬라이싱하고 부족한 자리수는 zfill 함수를 이용해서 왼쪽에 0을 채워줬다.
그렇게 만들어진 arr1_bin, arr2_bin를 가지고 for문을 돌려서 2중 배열의 요소를 비교하는데 둘 중 하나라도 1이라면 '#'을 문자열에 치환하고 둘 다 1이 없으면 공백을 치환한다.
그렇게 만들어진 문자열을 리스트에 담아서 리턴한다.
4중 for문이 만들어진 이유가 arr1, arr2를 각각 만들었기 때문이었다.
어차피 둘 다 돌려야하면 1번에 돌리는게 효율적이라는 것, 그리고 코드도 쉬워진다는 것을 깨달았다.
'코테공부' 카테고리의 다른 글
프로그래머스 38일차 - 흉부외과 또는 일반외과 의사 목록 출력하기 (0) | 2023.03.26 |
---|---|
프로그래머스 38일차 - 이상한 문자 만들기 (1) | 2023.03.26 |
프로그래머스 37일차 - 체육복 (0) | 2023.03.25 |
프로그래머스 37일차 - 완주하지 못한 선수 (0) | 2023.03.25 |
프로그래머스 36일차 - 최대공약수와 최소공배수 (0) | 2023.03.24 |